Itext 获取名称';来自交互式表单pdf的s字段

Itext 获取名称';来自交互式表单pdf的s字段,itext,Itext,早上好 我不知道,我怎样才能阅读pdf下面的字段名表格。 我对AcroFields使用了所有方法,但所有方法都返回0或null 我的代码: try { PdfReader.unethicalreading = true; PdfReader reader = new PdfReader(new FileInputStream("/root/TestPit8/web/notmod.pdf")); PdfStamper stamper = new

早上好

我不知道,我怎样才能阅读pdf下面的字段名表格。 我对AcroFields使用了所有方法,但所有方法都返回0或null

我的代码:

try {
        PdfReader.unethicalreading = true;
        PdfReader reader = new PdfReader(new FileInputStream("/root/TestPit8/web/notmod.pdf"));

        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("/root/TestPit8/web/testpdf.pdf"));
        AcroFields form = stamper.getAcroFields();


        form.setField("text_1", "666");
        form.setField("text_2", "666");
        form.setField("text_3", "666");
        form.setFieldProperty("text_3", "clrfflags", TextField.PASSWORD, null);
        form.setFieldProperty("text_3", "setflags", PdfAnnotation.FLAGS_PRINT, null);
        form.setField("text_3", "12345678", "xxxxxxxx");
        form.setFieldProperty("text_4", "textsize", new Float(12), null);
        form.regenerateField("text_4");
        stamper.close();
        reader.close();
        } catch( Exception ex) {
            ex.printStackTrace();
        }

Thx forhelp

您共享的表单是纯XFA表单。XFA代表XML表单体系结构

请阅读并滚动至“交互式表单”部分

这是本节的前两个问题:

您正在填写表单,就好像它是基于AcroForm技术一样。这不应该起作用,是吗?您的表单是XFA表单

我的书中解释了如何填写XFA表单,示例如下:

在这种情况下,
src
是原始表单的路径,
xml
是xml数据的路径,
dest
是填写表单的路径

如果要读取数据,需要以下示例:

这将读取完整表单(所有XFA):

如果只需要数据,则需要检查
数据集
节点:

public void readData(String src, String dest)
    throws IOException, ParserConfigurationException, SAXException,
        TransformerFactoryConfigurationError, TransformerException {
    FileOutputStream os = new FileOutputStream(dest);
    PdfReader reader = new PdfReader(src);
    XfaForm xfa = new XfaForm(reader);
    Node node = xfa.getDatasetsNode();
    NodeList list = node.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        if("data".equals(list.item(i).getLocalName())) {
            node = list.item(i);
            break;
        }
    }
    list = node.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        if("movies".equals(list.item(i).getLocalName())) {
            node = list.item(i);
            break;
        }
    }
    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    tf.setOutputProperty(OutputKeys.INDENT, "yes");
    tf.transform(new DOMSource(node), new StreamResult(os));
    reader.close();
}

换句话说,您要查找的字段名可能是这样的:
Deklaracja[0].Podmiot2[0].OsobaFizyczna[0].NIP[0]
(无论这些词是什么意思,我只知道一个波兰语单词:Podpis)。

您有没有可以找到示例代码的示例。简单地说,我需要文本到一些pdf格式的文本字段。你说“任何类似于我的程序”是什么意思?你能推荐我,任何类似于iText RUPS的程序吗。我不太确定,但这个程序给我留下了一些代码。例如,我在pdf文档中找不到第一个表单的源代码(identifikator podakowy NIP podmiotu),我是否可以请求帮助。以十种形式(10.识别驾驶员podatkowy并选择字段NIP,并在该字段附近写下NIP编号)我将更新我的答案。你是一个学生吗?你的问题听起来不像是个开发者。你知道StackOverflow的概念吗?如果有人给了你一个正确的答案(我做了),你就接受这个答案。
public void readXfa(String src, String dest)
    throws IOException, ParserConfigurationException, SAXException,
        TransformerFactoryConfigurationError, TransformerException {
    FileOutputStream os = new FileOutputStream(dest);
    PdfReader reader = new PdfReader(src);
    XfaForm xfa = new XfaForm(reader);
    Document doc = xfa.getDomDocument();
    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    tf.setOutputProperty(OutputKeys.INDENT, "yes");
    tf.transform(new DOMSource(doc), new StreamResult(os));
    reader.close();
}
public void readData(String src, String dest)
    throws IOException, ParserConfigurationException, SAXException,
        TransformerFactoryConfigurationError, TransformerException {
    FileOutputStream os = new FileOutputStream(dest);
    PdfReader reader = new PdfReader(src);
    XfaForm xfa = new XfaForm(reader);
    Node node = xfa.getDatasetsNode();
    NodeList list = node.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        if("data".equals(list.item(i).getLocalName())) {
            node = list.item(i);
            break;
        }
    }
    list = node.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
        if("movies".equals(list.item(i).getLocalName())) {
            node = list.item(i);
            break;
        }
    }
    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    tf.setOutputProperty(OutputKeys.INDENT, "yes");
    tf.transform(new DOMSource(node), new StreamResult(os));
    reader.close();
}
<Deklaracja xmlns="http://crd.gov.pl/wzor/2014/12/05/1880/" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2011/06/21/eD/DefinicjeTypy/">
    ....
    <Podmiot2 rola="Podatnik">
        <etd:OsobaFizyczna>
            <etd:NIP>0123456789</etd:NIP>
            <etd:ImiePierwsze>JUST TRY</etd:ImiePierwsze>
            <etd:Nazwisko>DUDE</etd:Nazwisko>
            <etd:DataUrodzenia>2015-02-19</etd:DataUrodzenia>
        </etd:OsobaFizyczna>
    </Podmiot2>
    ...
</Deklaracja>