我在"C:\\pdfs\\"
目錄中有pdf
文件。我想要獲得這些pdf文件並從meta_data.txt
文件中插入元數據。用我的知識iTextSharp的鎖,我編寫這樣的:我不想旋轉頁面,但iTextSharp以編程方式旋轉我的頁面
var pdf_files = Directory.GetFiles("C:\\pdfs\\", "*.pdf");
var i = 0;
foreach (var pdf_file in pdf_files)
{
var read = new PdfReader(pdf_file);
var size = read.GetPageSizeWithRotation(1);
var document = new Document(size);
var write = PdfWriter.GetInstance(document, new FileStream("C:\\temp\\" + "file_" + i, FileMode.Create, FileAccess.Write));
var datas = File.ReadAllLines("C:\\pdfs\\" + @"meta_data.txt");
var str = datas[i].Split('@');
document.AddTitle(str[1]);
document.AddSubject(str[2]);
document.AddCreator(str[3]);
document.AddAuthor(str[4]);
document.AddKeywords(str[5]);
document.Open();
var cb = write.DirectContent;
for (var pageNum = 1; pageNum <= read.NumberOfPages; pageNum++)
{
document.NewPage();
var page = write.GetImportedPage(read, pageNum);
cb.AddTemplate(page, 0, 0);
}
document.Close();
read.Close();
File.Delete(pdf_file);
File.Move("C:\\temp\\" + "file_" + i, "C:\\created\\" + "file_" + i);
i++;
}
此代碼得到的主要PDF文件的實例,而創建到temp
目錄,注入metadatas後來移動created
目錄。我找不到比這更實際的方法。 無論如何,在一些pdf文件(生成爲原始pdf文件)沒有這樣的問題: 但是一些其他pdf文件(從掃描或非常舊的pdf文件生成)以編程方式進行旋轉。它似乎令人噁心的是這樣的: 比所有更糟,我不知道我是如何解決這個問題的。你能幫我解決這個問題嗎?
原因是您選擇了一種非最佳方式將文檔與itext合併,不會複製原始頁面的所有屬性(因爲涉及的方法是爲不同的用例設計的)。使用基於'PdfCopy'而不是'PdfWriter'的合併解決方案,參見[這個答案](http://stackoverflow.com/a/15945467/1729265)。 – mkl
請閱讀官方文檔:http://developers.itextpdf.com/examples/miscellaneous/adding-metadata –