我在"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 –