gpt4 book ai didi

c# - PDF 文件是否包含 iref 流?

转载 作者:太空狗 更新时间:2023-10-29 19:49:37 26 4
gpt4 key购买 nike

我还在为从 PDF 文件中读取数据而苦恼。
我使用 PDFsharp,如何在不使用 Open 方法的情况下检查文件是否包含 iref 流。如果文件包含 iref 流,方法 Open 将抛出异常。

最佳答案

有一个已知的解决方法可以让您同时打开包含 iref 的 pdf 文件:您可以找到 here关于那个的完整线程。

只是总结解决方案:

  1. 下载并包含 iTextSharp 4.1.6 library
  2. 将代码文件中的以下代码粘贴到您的项目中:

-

using System;
using System.IO;

namespace PdfSharp.Pdf.IO
{
static public class CompatiblePdfReader
{
/// <summary>
/// uses itextsharp 4.1.6 to convert any pdf to 1.4 compatible pdf, called instead of PdfReader.open
/// </summary>
static public PdfDocument Open(string pdfPath)
{
using (var fileStream = new FileStream(pdfPath, FileMode.Open, FileAccess.Read))
{
var len = (int)fileStream.Length;
var fileArray = new Byte[len];
fileStream.Read(fileArray, 0, len);
fileStream.Close();

return Open(fileArray);
}
}

/// <summary>
/// uses itextsharp 4.1.6 to convert any pdf to 1.4 compatible pdf, called instead of PdfReader.open
/// </summary>
static public PdfDocument Open(byte[] fileArray)
{
return Open(new MemoryStream(fileArray));
}

/// <summary>
/// uses itextsharp 4.1.6 to convert any pdf to 1.4 compatible pdf, called instead of PdfReader.open
/// </summary>
static public PdfDocument Open(MemoryStream sourceStream)
{
PdfDocument outDoc;
sourceStream.Position = 0;

try
{
outDoc = PdfReader.Open(sourceStream, PdfDocumentOpenMode.Import);
}
catch (PdfReaderException)
{
//workaround if pdfsharp doesn't support this pdf
sourceStream.Position = 0;
var outputStream = new MemoryStream();
var reader = new iTextSharp.text.pdf.PdfReader(sourceStream);
var pdfStamper = new iTextSharp.text.pdf.PdfStamper(reader, outputStream) {FormFlattening = true};
pdfStamper.Writer.SetPdfVersion(iTextSharp.text.pdf.PdfWriter.PDF_VERSION_1_4);
pdfStamper.Writer.CloseStream = false;
pdfStamper.Close();

outDoc = PdfReader.Open(outputStream, PdfDocumentOpenMode.Import);
}

return outDoc;
}
}
}
  1. 将对 PdfReader.Open 的所有调用更改为 CompatiblePdfReader.Open

它对我来说就像一个魅力,希望这对你有帮助。

关于c# - PDF 文件是否包含 iref 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12782295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com