使用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可以阅读该字段。
你知道为什么我有这个问题吗? 我该怎么做才能解决这个问题?
答案 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();
}
}