从pdf表单中如何提取信息

littlebad_boy 2008-10-16 10:22:47
现在有一个pdf的表单,submit的时候设置 的export format是 XFDF include
请问用Php怎样能够拿到他提交的信息
...全文
609 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuliao628 2008-10-27
  • 打赏
  • 举报
回复
好有难度啊~!
cqdyh 2008-10-26
  • 打赏
  • 举报
回复

private void mkEvent_ShowPDF(string DocumentID)
{
string XML_Src=null;
string pub_PublicData=null;

if (adm_DocumentID != "0" && long.Parse(adm_DocumentID) > 0)
{
//|Build XDP by Backend
DocumentID = adm_DocumentID;
}
else
{
XML_Src = clsDataBase.getDBValue("SELECT * FROM [ItemUSE] WHERE ([TransactionID]='"+ TransID +"') AND ([TaskID]='"+ TaskID +"') AND ([ItemID]='"+ ItemID +"') ", "ItemData", "");
string mks_TransNo = clsDataBase.getDBValue("SELECT * FROM [Transaction] WHERE ([TransactionID]='"+ long.Parse("0" + TransID).ToString() +"')", "TransactionNo", "N/A");
string mks_TaskName = clsDataBase.getDBValue("SELECT * FROM [Task] WHERE ([TaskID]='"+ long.Parse("0" + TaskID).ToString() +"')", "TaskName", "N/A");
string mks_ItemName = clsDataBase.getDBValue("SELECT * FROM [Item] WHERE ([ItemID]='"+ long.Parse("0" + ItemID).ToString() +"')", "ItemName", "N/A");

pageTitle.InnerText = "Current Trans.:["+ mks_TransNo +"] / Task:["+ mks_TaskName +"] / Item:["+ mks_ItemName +"]";
}

try
{
DocumentID = long.Parse("0" + DocumentID).ToString();
}
catch
{
pageTitle.InnerText = "[mk.DocID] Please choose form document...";
lblPdfHtml.Text = "<li><font color='#ff0000' face='Arial' size=1>[mk.DocID] Please choose form document...</font></li>";
return ;
}
if (DocumentID != "0")
{
strTask = clsDataBase.getDBValue("SELECT * FROM [Document] WHERE ([DocumentID]="+ long.Parse("0" + DocumentID).ToString() +")", "FilePath", "");
pub_PublicData = clsDataBase.getDBValue("SELECT * FROM [Document] WHERE ([DocumentID]="+ long.Parse("0" + DocumentID).ToString() +")", "EqualFields", "");
}
else
{
try
{
strTask = Request.QueryString["pdfURL"];
}
catch{}
}

if (strTask == null || strTask.Trim().Length < 1)
{
pageTitle.InnerText = "[ERROR: The PDF From Document is not found]";
lblPdfHtml.Text = "<li><font color='#ff0000' face='Arial' size=1>Please choose document for transaction item...</font></li>";
return ;
}

string strPagePath = "";
strPagePath = Request.Url.ToString();
strPagePath = strPagePath.Substring(0, strPagePath.LastIndexOf("/")+1);


string PDF_Src = Server.MapPath(strTask);
string syn_timer = "";
string syn_check = clsDataBase.Check.GetAppSet("synchro_precision", false.ToString());
if (clsDataBase.Check.cBool(syn_check))
{
syn_timer = DateTime.Now.Ticks.ToString();
}
string PDF_URL = clsDataBase.Check.GetRootPath(this.Page) + "SessionTemp/"+ this.Session.SessionID +"_tmp"+ syn_timer +"_"+ TransID + "_" + TaskID + "_" + ItemID + "_" + DocumentID +".xdp";
//PDF_URL = this.Session.SessionID +"__tmp"+ syn_timer +"_"+ TransID + "_" + TaskID + "_" + ItemID + "_" + DocumentID +".fDF";
string PDF_Out = Server.MapPath(PDF_URL);
string LastPdfFile = clsDataBase.Check.FixNull(Session["LastPdfFile"], null);
if (LastPdfFile != null && System.IO.File.Exists(LastPdfFile))
{
System.IO.File.Delete(LastPdfFile);
}
Session["LastPdfFile"] = PDF_Out;

bool blnOK;
bool blnLock = false;
//blnLock = clsDataBase.Check.cBool(Application["FillPDFForm_Locked"]);
if (!blnLock)
{

using (clsFillPDF.FillFormCS mkpdf = new clsFillPDF.FillFormCS(this.Page))
{
clsFillPDF.FillFormCS.UseNew_PDFURL emUseNew = clsFillPDF.FillFormCS.UseNew_PDFURL.Auto;
string cfg_UseNew = clsDataBase.Check.GetAppSet("XDP_UseNew_PDFURL_Enum", emUseNew.ToString());
try
{
emUseNew = (clsFillPDF.FillFormCS.UseNew_PDFURL) Enum.Parse(typeof(clsFillPDF.FillFormCS.UseNew_PDFURL), cfg_UseNew, false);
}
catch
{
errMsg += "<!--// [mk.UseNew] Web.config is invalid. //-->";
}

try
{
string xdp_Public = clsXdpData.getXDP_AllPublicDate(TransID, TaskID, ItemID, DocID);
if (XML_Src == null)
{
//|第一次加载 或 后台 [Build XDP] ...
//|PDF Document 加载默认设置

XML_Src = pub_PublicData;
}

//|XDP 格式检测
System.Xml.XmlDocument xmlDOC;
try
{
xmlDOC = mkpdf.Str_XMLDoc(XML_Src);
if (!mkpdf.CheckXDP(xmlDOC, true))
{
//|对XDP格式检测未通过, 则启用最简(安全)设置

pageTitle.InnerText += " {NEW} ";
XML_Src = mkpdf.GetNewCreateXDP(strTask, xdp_Public, true);
}
}
catch
{
//|原记录或默认设置无效, 则启用最简(安全)设置

errMsg += "{MK:UCS.UTF-16}";
XML_Src = mkpdf.GetNewCreateXDP(strTask, xdp_Public, true);
}

if (adm_DocumentID == "0" || long.Parse(adm_DocumentID) < 1)
{
//|非 后台 [Build XDP] 任务, 则执行["关键字"]转换操作
//|对 公共字段["关键字"]转换...

XML_Src = clsXdpData.ConvertData(XML_Src, TransID, TaskID, ItemID, DocID);
}
blnOK = mkpdf.XDP_Fill(strTask, XML_Src, xdp_Public, PDF_URL, emUseNew);
strObjectHtml += mkpdf.szMsg;
}
catch(Exception errFill)
{
blnOK = false;
strObjectHtml += "<font color='#ff0000' face='Arial' size=1><li>[mk] "+ errFill.Message +"</li></font>";

strObjectHtml += mkpdf.szMsg + "\n" + errMsg;
}
}
if (blnOK)
{
strObjectHtml += "<object classid=\"clsid:CA8A9780-280D-11CF-A24D-444553540000\" CODEBASE=\""+ strPagePath +"AX_PDFRD.CAB#version=0,0,0,0\" width=\"100%\" height=\"100%\" border=\"0\">";
strObjectHtml += "<param NAME=\"_Version\" VALUE=\"65539\">";
strObjectHtml += "<param NAME=\"_ExtentX\" VALUE=\"20108\">";
strObjectHtml += "<param NAME=\"_ExtentY\" VALUE=\"10866\">";
strObjectHtml += "<PARAM NAME=\"_cx\" VALUE=\"26035\">";
strObjectHtml += "<PARAM NAME=\"_cy\" VALUE=\"15663\">";
strObjectHtml += "<param NAME=\"_StockProps\" VALUE=\"0\">";
//|strObjectHtml += "<param NAME=\"HREF\" VALUE=\""+ strTask + "\">";
strObjectHtml += "<param NAME=\"SRC\" VALUE=\""+ (PDF_URL) +"\">";
strObjectHtml += "</object>";
}
else
{
strObjectHtml += "<li><font color='#ff4040' face='Arial' size=1>The server is busy!</font></li>";
}

//|解锁Fill PDF Enable
//-Application["FillPDFForm_Locked"] = false;
}
else
{
strObjectHtml += "<li><font color='#ff0000' face='Arial' size=1>The server is busy and locked!</font></li>";
}
lblPdfHtml.Text = strObjectHtml;

//Response.Clear();
//strObjectHtml = "<html><body leftmargin=0 topmargin=0 scroll=no>";
//lblPdfHtml.Text = "<embed width=100% height=100% fullscreen=yes src=\""+ strTask +"\" />";
//strObjectHtml += "</body></html>";
//Response.Write(strObjectHtml);
//blnBreak = true;
}

cqdyh 2008-10-26
  • 打赏
  • 举报
回复

"回复内容过长!"

WritePDF.aspx.cs 文件
[code=C#]using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace VOA.Form
{
/// <summary>
/// WritePDF 的摘要说明。
/// </summary>
public class WritePDF : System.Web.UI.Page
{
//|||||||||||||||||||||||
private Check vb = new Check();
private clsDataBase clsDataBase = new clsDataBase();
private clsXdpData clsXdpData = new clsXdpData();
protected DataTable dt = new DataTable();
protected const string DBName="Transaction", DBPK = "TransactionID";
protected string errMsg="";
//|||||||||||||||||||||||
protected System.Web.UI.WebControls.Label lblPdfHtml;
protected System.Web.UI.HtmlControls.HtmlContainerControl pageTitle;

string strTask = null;
string strEvent = null;
string strType = null;
string strObjectHtml = "";
bool blnBreak = false;
const string cst_Event__Save = "WebSave";
const string cst_Type_Http = "Http";

string adm_DocumentID;
string TransID, TaskID, ItemID, DocID;
protected System.Web.UI.HtmlControls.HtmlInputButton btnClose;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面

TransID = clsDataBase.Check.FixNull(Session["Flow_WritePDF_TransID"], "0");
TaskID = clsDataBase.Check.FixNull(Session["Flow_WritePDF_TaskID"], "0");
ItemID = clsDataBase.Check.FixNull(Session["Flow_WritePDF_ItemID"], "0");
DocID = clsDataBase.Check.FixNull(Session["Flow_WritePDF_DocID"], "0");
adm_DocumentID = clsDataBase.Check.FixNull(Session["ADMIN_BuildXDP_DOCUMENTID"], "0");

if (!IsPostBack)
{

try
{
//|取得任务事件 保存/显示
strEvent = Request.QueryString["mkEvent"];//=WebSave
}
catch{}
try
{
//|取得 保存方式 XML/XDP/HTTP/PDF
strType = Request.QueryString["mkType"];
}
catch{}

if (strEvent != null && strEvent.ToUpper() == cst_Event__Save.ToUpper())
{
//|保存提交
this.mkEvent_Save(ref blnBreak);
}
else
{
//|显示PDF文件
this.mkEvent_ShowPDF(DocID);
}

if (blnBreak)
{
//|是否请求中断
Response.End();
}

}
}

private void WritePDF_PreRender(object sender, EventArgs e)
{

}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnClose.ServerClick += new System.EventHandler(this.btnClose_ServerClick);
this.Load += new System.EventHandler(this.Page_Load);
this.PreRender += new System.EventHandler(this.WritePDF_PreRender);

}
#endregion
cqdyh 2008-10-26
  • 打赏
  • 举报
回复
我曾经提交 PDF 内表单时, 使用的是 XDP 提交
收到的内容如:
<?xml version="1.0" encoding="UTF-8"?>
<?xfa generator="XFA2_0" APIVersion="2.2.4333.0"?>
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"
><xfa:data
><unform
><mkNull
>Marksoft.NET</mkNull
></unform
></xfa:data
></xfa:datasets
>
<pdf href="http://localhost/Work/VOA/Form/_632579695031521104_FF__107.pdf" xmlns="http://ns.adobe.com/xdp/pdf/"
/>
<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"
><annots
/></xfdf
></xdp:xdp>


然后在显示该PDF时,对其关键字转换
以下是源文件代码, 书下得不怎么规范,见谅.

WritePDF.aspx

<%@ Page language="c#" Codebehind="WritePDF.aspx.cs" AutoEventWireup="false" Inherits="VOA.Form.WritePDF" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title runat="server" id="pageTitle">WritePDF</title>
<style>
BODY { MARGIN: 0px }
</style>
</HEAD>
<body leftmargin="0" topmargin="0" scroll="no">
<form id="frmWritePdf" method="post" runat="server">
<div style=" ; LEFT:expression((document.body.clientWidth-this.clientWidth)/2); POSITION:absolute; TOP:22px"><input type="button" value="Close" id="btnClose" name="btnClose" runat="server"></div>
<asp:Label ID="lblPdfHtml" Runat="server"></asp:Label>
</form>
</body>
</HTML>

dzxccsu 2008-10-16
  • 打赏
  • 举报
回复
顶个,等高手来!

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧