中文字符而不是文本到元数据称为“生产者”

时间:2014-04-11 15:30:10

标签: c# pdf itextsharp metadata pdf-manipulation

使用iTextSharp编辑pdf的元数据时遇到问题。 我用Word保存pdf的word文档。名为“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可以阅读该字段。

你知道为什么我有这个问题吗? 我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分: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();
    }
}