我不想旋转页面,但iTextSharp以编程方式旋转我的页面

时间:2017-02-19 10:34:45

标签: c# pdf itext

我在pdf目录中有"C:\\pdfs\\"个文件。我想获取这些pdf文件并从meta_data.txt文件中插入元数据。凭借我对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文件生成)中没有这样的问题: enter image description here 但是其他一些pdf文件(从扫描或非常旧的pdf文件生成)以编程方式旋转。看起来像这样恶心: enter image description here 更糟糕的是,我不知道如何解决问题。你能帮我解决一下这个问题。

1 个答案:

答案 0 :(得分:2)

这个问题的正确答案如下:

PdfReader reader = new PdfReader(src);
using (PdfStamper stamper = new PdfStamper(reader,
    new FileStream("C:\\temp\\" + "file_" + i, FileMode.Create, FileAccess.Write))) {
    Dictionary<String, String> info = reader.Info;
    info["Title"] = "Hello World stamped";
    info["Subject"] = "Hello World with changed metadata";
    info["Keywords"] = "iText in Action, PdfStamper";
    info["Creator"] = "Silly standalone example";
    info["Author"] = "Bruno Lowagie";
    stamper.MoreInfo = info;
}

Habip OĞUZ忽略了我在“动作中的iText - 第二版”的Chapter 6中所写的内容,即使用DocumentPdfWriterAddTemplate()是错误的当您想要操作单个现有PDF时。通过使用AddTemplate(),您可以丢弃大量功能,例如交互性,结构等。您还创建了一个次优的PDF,因为每个页面都将存储为Form XObject。