4 回答

TA貢獻1807條經驗 獲得超9個贊
如果不使用第 3 方庫,用 C# 或任何其他語言合并 pdf 并不簡單。
我假設您不使用庫的要求是大多數免費庫、nuget 包都有限制或/并且商業用途需要花錢。
我做了研究,找到了一個名為PdfClown的開源庫,帶有nuget包,它也適用于 Java。它是免費的,沒有限制(如果您愿意,請捐贈)。該庫有很多功能。您可以將 2 個或多個文檔合并為一個文檔。
我提供了一個示例,該示例采用一個包含多個 pdf 文件的文件夾,將其合并并將其保存到同一個或另一個文件夾中。也可以使用 MemoryStream,但我認為在這種情況下沒有必要。
代碼是自我解釋的,這里的關鍵點是使用SerializationModeEnum.Incremental
:
public static void MergePdf(string srcPath, string destFile)
{
? ? var list = Directory.GetFiles(Path.GetFullPath(srcPath));
? ? if (string.IsNullOrWhiteSpace(srcPath) || string.IsNullOrWhiteSpace(destFile) || list.Length <= 1)
? ? ? ? return;
? ? var files = list.Select(File.ReadAllBytes).ToList();
? ? using (var dest = new org.pdfclown.files.File(new org.pdfclown.bytes.Buffer(files[0])))
? ? {
? ? ? ? var document = dest.Document;
? ? ? ? var builder = new org.pdfclown.tools.PageManager(document);
? ? ? ? foreach (var file in files.Skip(1))
? ? ? ? {
? ? ? ? ? ? using (var src = new org.pdfclown.files.File(new org.pdfclown.bytes.Buffer(file)))
? ? ? ? ? ? { builder.Add(src.Document); }
? ? ? ? }
? ? ? ? dest.Save(destFile, SerializationModeEnum.Incremental);
? ? }
}
測試一下
var srcPath = @"C:\temp\pdf\input";
var destFile = @"c:\temp\pdf\output\merged.pdf";
MergePdf(srcPath, destFile);
輸入示例
PDF 文檔 A 和 PDF 文檔 B
輸出示例

TA貢獻1829條經驗 獲得超7個贊
這個答案有用:
? ? ? using (PdfDocument one = PdfReader.Open("pdf 1.pdf", PdfDocumentOpenMode.Import))
? ? ? ? using (PdfDocument two = PdfReader.Open("pdf 2.pdf", PdfDocumentOpenMode.Import))
? ? ? ? using (PdfDocument outPdf = new PdfDocument())
? ? ? ? {
? ? ? ? ? ? CopyPages(one, outPdf);
? ? ? ? ? ? CopyPages(two, outPdf);
? ? ? ? ? ? outPdf.Save("file1and2.pdf");
? ? ? ? }
? ? ? ? void CopyPages(PdfDocument from, PdfDocument to)
? ? ? ? {
? ? ? ? ? ? for (int i = 0; i < from.PageCount; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? to.AddPage(from.Pages[i]);
? ? ? ? ? ? }
? ? ? ? }

TA貢獻1784條經驗 獲得超7個贊
PDF 的工作原理并不完全是這樣。PDF 是特定格式的結構化文件。您不能只是將一個字節附加到另一個字節并期望結果是有效的文檔。
您將必須使用一個能夠理解格式并可以為您執行操作的庫,或者開發您自己的解決方案。

TA貢獻1793條經驗 獲得超6個贊
PDF 文件不僅僅是文本和圖像。在幕后有一個嚴格的文件格式來描述 PDF 版本、文件中包含的對象以及在哪里可以找到它們等內容。
為了合并 2 個 PDF,您需要操作流。
首先,您需要僅保留其中一個文件的標頭。這非常簡單,因為它只是第一行。
然后你可以寫第一頁的正文,然后是第二頁。
現在最困難的部分,也可能是說服您使用庫的部分,是您必須重新構建外部參照表。外部參照表是一個交叉引用表,它描述了文檔的內容,更重要的是在哪里可以找到每個元素。您必須計算第二頁的字節偏移量,將其外部參照表中的所有元素移動那么多,然后將其外部參照表添加到第一頁。您還需要確保在外部參照表中為分頁符創建對象。
完成后,您需要重新構建文檔預告片,它告訴應用程序文檔的各個部分的位置。
- 4 回答
- 0 關注
- 193 瀏覽
添加回答
舉報