Как программно определять динамический PDF в формате XFA (Adobe XML Forms Architecture) - PullRequest
1 голос
/ 12 октября 2011

У меня есть система, которая конвертирует PDF в TIF.По сути, это программа, написанная на csharp, которая использует iTextSharp для получения метаданных о pdf и pdf2tif (http://pdftotif.sourceforge.net/) для преобразования в файл. Я заметил, что некоторые pdf не конвертируются правильно. В Acrobat и Foxit они открываются как многостраничныеформы, но в любом другом средстве просмотра (Ghostscript ...) они открываются как одностраничные документы с сообщением

"Для просмотра всего содержимого этого документа вам потребуется более поздняя версия средства просмотра PDF. Вы можете обновитьдо последней версии Adobe Reader с сайта «www.adobe.com/products/acrobat/readstep2.html». Для получения дополнительной поддержки перейдите по адресу http://www.adobe.com/support/products/acrreader.html"

Некоторые из них говорили мне, что это динамические PDF-файлы XFA.Есть ли способ, которым я могу программно обнаружить это, чтобы я мог попытаться обработать эти PDF по-разному?

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Хорошее начало - iText API .

В iTextSharp вы получаете доступ к свойству объекта вместо вызова метода.(если вы проделали небольшую работу с iTextSharp, вы, вероятно, уже знаете это)

В любом случае, вот простой пример использования обработчика HTTP :

<%@ WebHandler Language="C#" Class="iTextXfa" %>
using System;
using System.Web;
using iTextSharp.text;  
using iTextSharp.text.pdf;

public class iTextXfa : IHttpHandler {
  public void ProcessRequest (HttpContext context) {
    HttpServerUtility Server = context.Server;
    string[] testFiles = { 
      Server.MapPath("./non-XFA.pdf"), Server.MapPath("./XFA.pdf") 
    };
    foreach (string file in testFiles) {
      XfaForm xfa = new XfaForm(new PdfReader(file));
      context.Response.Write(string.Format(
        "<p>File: {0} is XFA: {1}</p>",
        file,
        xfa.XfaPresent ? "YES" : "NO"
      ));
    }
  }
  public bool IsReusable { get { return false; } }
}
0 голосов
/ 15 мая 2012

Подход командной строки:

strings document.pdf | grep XFA

Если вы получили строку или две, вы, вероятно, работаете с XFA PDF:

<</Names[(!ADBE::0100_VersChkStrings) 364 0 R(!ADBE::0100_VersChkVars) 365 0 R(!ADBE::0200_VersChkCode_XFACheck) 366 0 R]>>
...