1

使用 iTextSharp 编辑 pdf 的元数据时遇到问题。我用 Word 将 word 文档保存为 pdf 格式。名为“Producer”的字段由文本“Microsoft Word 210”填充。之后,我使用 ITextSharp 编辑元数据,iTextSharp 尝试编辑此字段以添加“使用 iTextSharp 4.1.6 修改”的文本。

结果是Producer(þÿMicrosoft® Word 2010; modified using iTextSharp 4.1.6 by 1T3XT)。在 adobe reader 中,文档属性中的字段 PDF Producer 显示中文字符。

如果我手动删除字符,Adobe 可以读取该字段þÿ

你知道为什么我有这个问题吗?我能做些什么来解决这个问题?

4

1 回答 1

0

仅供参考,这适用于 iText 2.1.7。它是 Java 代码,但可能也适用于 C#。

    import java.io.File;
import java.io.FileOutputStream;

import org.junit.Test;

import com.lowagie.text.pdf.PdfDictionary;
import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.PdfString;

public class AppTest {

    @Test
    public void testApp() throws Exception {
        PdfReader reader = new PdfReader(AppTest.class.getResourceAsStream("/msword2010.pdf"));

        FileOutputStream fos = new FileOutputStream(new File("target", "modified_msword2010.pdf"));
        PdfStamper stamper = new PdfStamper(reader, fos, '\0', true);

        PdfDictionary infoDict = stamper.getReader().getTrailer().getAsDict(PdfName.INFO);
        String producerCleaned = null;

        if (infoDict != null) {
            PdfString producer = (PdfString) infoDict.get(PdfName.PRODUCER);
            if (producer != null) {
                producerCleaned = producer.toUnicodeString();
                PdfString cleanStrObj = new PdfString(producerCleaned);
                infoDict.put(PdfName.PRODUCER, cleanStrObj);
            }
        }

        stamper.close();
    }
}
于 2015-12-16T21:58:42.720 回答