我想要的是在iText中加载一个普通的PDF文件并将其导出(或写入)为PDF/A1-A.
我手动并使用iTextSharp获得了"iText in action sec.edit".仍然进展== null.
这似乎是一个微不足道的问题,我想打开现有的pdf模板,编辑并展平文件,然后作为电子邮件附件发送.但是如何设置PdfReader来读取我的Content文件夹中的文件(Content/Documents/PDFFile.pdf).这就是我所提供的错误"(无论我尝试什么路径).pdf都没有找到作为文件或资源".
using (MemoryStream ms = new MemoryStream())
{
//Error is here...
PdfReader reader = new PdfReader("~/Content/Documents/PDFFile.pdf");
PdfStamper formFiller = new PdfStamper(reader, ms);
AcroFields formFields = formFiller.AcroFields;
formFields.SetField("Name", formData.Name);
formFields.SetField("Location", formData.Address);
formFields.SetField("Date", DateTime.Today.ToShortDateString());
formFields.SetField("Email", formData.Email);
formFiller.FormFlattening = true;
formFiller.Close();
MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress("to@email.com"));
msg.From = new MailAddress("from@email.com");
msg.Subject = "Application Form";
msg.Body = "TEST";
msg.IsBodyHtml = true;
msg.Attachments.Add(new Attachment(ms, "Application.pdf", "application/x-pdf"));
SmtpClient client = new SmtpClient("10.1.1.15");
client.UseDefaultCredentials = true;
}
Run Code Online (Sandbox Code Playgroud)
有什么建议/想法/建议吗?
如果多个字段具有相同的名称iTextSharp acroFields.SetField(Name, Value),则仅为第一个字段设置值。如何为其余字段设置值?通过acroFields.Fields循环时,字段名称报告为
form1[0].#subform[0].TextField1[0] - TextField
form1[0].#subform[0].TextField2[0] - TextField
form1[0].#subform[0].TextField2[1] - TextField
form1[0].#subform[0].TextField2[2] - TextField
Run Code Online (Sandbox Code Playgroud)
使用时
acroFields.SetField("TextField1", Value);
Run Code Online (Sandbox Code Playgroud)
设置名为TextField1的文本字段的值。只有一个名为TextField1的字段,所以很好。但是当使用
acroFields.SetField("TextField2", Value);
Run Code Online (Sandbox Code Playgroud)
设置名为TextField2 的第一个文本字段的值。其余两个名为TextField2的字段保持不变。
PDF是使用Adobe LiveCycle创建的,并保存为静态PDF,即不是动态XFA。
我正在尝试设置pdf的背景并设法用图像设置我的pdf有一个大表,所以页面是自动添加的,而不是使用Document.NewPage()方法,所以图像背景只在第一页上设置.这是添加背景的代码:
Image backImg = Image.GetInstance(@"D:\websites\DIS\bugs\130208\A4.png");
backImg.SetAbsolutePosition(0, 0);
backImg.Alignment = Image.UNDERLYING;
var doc = new Document(pageSize);
PdfWriter pdfWriter = PdfWriter.GetInstance(doc, new FileStream(filePath, FileMode.Create));
doc.Open();
doc.Add(backImg);
...
creating a big table
Run Code Online (Sandbox Code Playgroud)
而不是使用该doc.NewPage()方法.在关闭文档之前,我是否必须循环抛出每个页面并在结尾处添加背景图像,但是如何将其放在后台而不是其他元素之上?
我的应用程序首先加载文本文件在richtextbox whitout任何问题:
StreamReader str = new StreamReader("C:\\test.txt");
while (str.Peek() != -1)
{
richtextbox1.AppendText(str.ReadToEnd());
}
Run Code Online (Sandbox Code Playgroud)
之后,我想使用itextsharp将richtextbox的文本导出为pdf格式:
iTextSharp.text.Document doc = new iTextSharp.text.Document();
iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));
doc.Open();
doc.Add(new iTextSharp.text.Paragraph(richtextbox1.Text));
doc.Close();
Run Code Online (Sandbox Code Playgroud)
我使用了背景工作者,但它没有帮助我:
private delegate void upme(string filenamed);
private void callpdf(string filename)
{
iTextSharp.text.Document doc = new iTextSharp.text.Document();
iTextSharp.text.pdf.PdfWriter.GetInstance(doc, new FileStream(filename, FileMode.Create));
doc.Open();
doc.Add(new iTextSharp.text.Paragraph(richtextbox1.Text));
doc.Close();
}
private void savepdfformat(string filenames)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += delegate(object s, DoWorkEventArgs args)
{
upme movv = new upme(callpdf);
richtextbox1.Dispatcher.Invoke(movv, System.Windows.Threading.DispatcherPriority.Normal, filenames);
};
bg.RunWorkerCompleted …Run Code Online (Sandbox Code Playgroud) 我正在使用asp.net C#在iTextSharp上创建PDF文件。我使用iTextSharp创建了许多报告(pdfs),并且都运行良好。现在,我的客户给了我预先格式化的pdf文件,其中有些文本需要替换为数据库值。
现在,我想替换现有pdf文件中的文本并创建一个新的。但正如我在Google上搜索的那样,在iTextSharp中是不可能的。
我现在有一些问题,真的不能使用iTextSharp替换pdf中的文本吗?是否有其他这样做的库或第三方工具(不需要免费许可证)?如果是这样,请给我一些建议。
对于您的信息,我在pdf文件中没有AcroFields,也听说过ASPOSE-PDF文件格式API(这不是免费的)。
根据以下网站...
http://forums.asp.net/t/1630140.aspx?extracting+pdf+pages+using+itextsharp
...我使用ExtractPages函数根据页码范围生成新的PDF.我的问题是我注意到第二页上有一个矩形的PDF没有随页面一起提取.这让我有些担心,也许Adobe的评论不会随着页面被提取而被转移.
有没有一种方法可以调整此代码,以便在调用ExtractPages时将注释和对象(如矩形)引入新PDF?我错过了语法,还是iTextSharp版本5.5.0不可用?
我正在使用iTextSharp尝试为我生成的PDF添加页眉和页脚,但是,如果我尝试添加宽度为页面100%的页眉,我会遇到一些问题.
所以我做了以下事情:
1)我创建了一个名为PdfHeaderFooter的类,它扩展了iTextSharp PdfPageEventHelper类
2)进入PdfHeaderFooter我已经实现了生成头的OnStartPage()方法:
// write on start of each page
public override void OnStartPage(PdfWriter writer, Document document)
{
base.OnStartPage(writer, document);
PdfPTable tabHead = new PdfPTable(new float[] { 1F });
PdfPCell cell;
//tabHead.TotalWidth = 300F;
tabHead.WidthPercentage = 100;
cell = new PdfPCell(new Phrase("Header"));
tabHead.AddCell(cell);
tabHead.WriteSelectedRows(0, -1, 150, document.Top, writer.DirectContent);
}
Run Code Online (Sandbox Code Playgroud)
如果我使用像tabHead.TotalWidth = 300F那样的东西; insted的tabHead.WidthPercentage = 100; 它运行良好,但如果我尝试将tabHead.WriteSelectedRows(0,-1,150,document.Top,writer.DirectContent)设置为tabHead表的宽度(就像我在前面的例子中所做的那样)的100%它抛出以下异常的方法:
表格宽度必须大于零.
为什么?问题是什么?如果我将其设置为100%,那么该表的大小是多少?
有人可以帮我解决这个问题吗?
TNX
我正在尝试编写一个应用程序,它将触发我在ASP.NET中构建的一系列Web报表.所以我有一个Web应用程序,其中页面存在,但我真的不想使用该网站查看页面,我想创建我可以提供给我的客户的PDF.
我正在尝试编写的应用程序是一个控制台应用程序,在c#中使用Visual Studio 2010编写并使用iTextSharp v5.5.2和.NET 4.5.它目前只是一个框架,因为我尚未完成"解雇PDF"部分.我正在从网上访问一个页面并试图将其保存为PDF,但我找不到任何有关我得到的编译错误的信息.我在应用程序中有以下Using指令:
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html;
using iTextSharp.text.xml;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using iTextSharp.text.io;
using iTextSharp.text.xml.simpleparser;
using iTextSharp.text.html.simpleparser;
namespace ConsoleApplication1
{
public partial class BuildReports : System.Web.UI.Page
{
static void Main(string[] args)
{
WebRequest wReq = WebRequest.Create("http://www.somesite.com/");
WebResponse wRsp = null;
try
{
wRsp = wReq.GetResponse();
}
catch (Exception e)
{
Console.WriteLine("{0} exception caught.", …Run Code Online (Sandbox Code Playgroud) 我想在pdf中更改一些HTML.我的所有HTML都是HTML字符串,但我不知道如何正确传递它iTextSharp.
public void PDF()
{
// Create a doc object
var doc = new doc(PageSize.A4, 50, 50, 25, 25);
// Create a new PdfWrite object, writing the output to the file ~/PDFTemplate/SimpleFormFieldDemo.pdf
var output = new FileStream(Server.MapPath("t.pdf"), FileMode.Create);
var writer = PdfWriter.GetInstance(doc, output);
// Open the doc for writing
doc.Open();
//Add Wallpaper image to the pdf
var Wallpaper = iTextSharp.text.Image.GetInstance(Server.MapPath("hfc.png"));
Wallpaper.SetAbsolutePosition(0, 0);
Wallpaper.ScaleAbsolute(600, 840);
doc.Add(Wallpaper);
iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(doc);
StyleSheet css = new StyleSheet();
css.LoadTagStyle("body", "face", "Garamond"); …Run Code Online (Sandbox Code Playgroud) 我已将iTextSharp包含在我的项目中,以便能够创建PDF文件.这是我的代码:
Document document = new Document(iTextSharp.text.PageSize.LETTER,20,20,42,35);
PdfWriter writer =
PdfWriter.GetInstance(document,newFileStream("Test.pdf",FileMode.Create));
document.Open();
Paragraph paragraph = new Paragraph("Test");
document.Add(paragraph);
document.Close();
Run Code Online (Sandbox Code Playgroud)
现在错误出现了:Font是System.Drawing.Font和iTextSharp.text.Font之间的模糊引用.
这是带有红色下划线的代码:
RichTextBox tempBox = new RichTextBox();
tempBox.Size = new Size(650,60);
tempBox.Font = new Font(FontFamily.GenericSansSerif,11.0F); //here is error
flowLayoutPanel1.Controls.Add(tempBox);
Run Code Online (Sandbox Code Playgroud) 我使用C#.NET 3.5开发了Bentley Microstation Addin.此Addin使用itextsharp来创建PDF文件.
在我的情况下,在第一个itextsharp命令:
PdfReader _reader = new PdfReader("...\ab.pdf");
Run Code Online (Sandbox Code Playgroud)
"无法加载itextsharp.LicenseKey!原因:程序集不是vaild或无法通过'Assembly.LoadForm'加载"
在我确认此消息后,程序运行正常,并且pdf没有错误.消息可能是一个例子?!
如果我将PDF创建部分作为独立的exe运行,则没有任何消息.
我正在寻找解决方案来禁用或捕获此错误.
edit1:这是我的代码的iText部分:
using iTextSharp.text.pdf;
...
PdfReader _reader = new PdfReader("D:\Test\Source.pdf");
PdfStamper _stamper = new PdfStamper(_reader, new FileStream("D:\Test\Destination.pdf", FileMode.Create));
AcroFields _fields = _stamper.AcroFields;
var _fieldKeys = _fields.Fields.Keys;
foreach (string _fieldKey in _fieldKeys)
{
string _value = "";
if (_DataMapping.ContainsKey(_fieldKey.Split('.').Last().Replace("[0]", "")))
_value = _DataMapping[_fieldKey.Split('.').Last().Replace("[0]", "")];
_fields.SetField(_fieldKey, _value);
}
_stamper.Close();
_reader.Close();
Run Code Online (Sandbox Code Playgroud)
_DataMapping是一个包含字段/值映射的字典.
我尝试用iTextSharp版本5.5.9.0(我从NuGet添加)创建一个PDF文件.一切正常,但没有和罗马尼亚变音符号(ŞşŢţăĂÂâ).我阅读了很多关于这方面的解决方案,但没有任何作用.现在我建立了一个解决方案,从所有变音符出现只有"ĂĂ ",其他人不出现.那是我的代码:
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, False)
Dim normalFont As New iTextSharp.text.Font(bf, 9, Font.NORMAL)
Dim par As New Paragraph("??????Ââ", normalFont)
pdfDoc.Add(par)
Run Code Online (Sandbox Code Playgroud)
任何人都可以写我必须编写的编码,以获得所有罗马尼亚变音符号.
解决方案:来自"Paulo Soares"是对的.我只做了一些修正.我从这个网站下载了一种支持罗马尼亚语的字体:https: //www.fontsquirrel.com/fonts/list/language/romanian/,而不是我在myBaseFont上加载它的编码BaseFont.IDENTITY_H 这是代码:
Dim ttfPath As String = "C:\Test\DejaVuSerif.ttf" 'Path to font file
Dim bf As BaseFont = BaseFont.CreateFont(ttfPath, BaseFont.IDENTITY_H, False)
Dim normalFont As New iTextSharp.text.Font(bf, 9, iTextSharp.text.Font.NORMAL)
Run Code Online (Sandbox Code Playgroud) itextsharp ×13
c# ×10
pdf ×8
itext ×3
asp.net ×2
asp.net-mvc ×1
microstation ×1
optimization ×1
pdfa ×1
vb.net ×1
winforms ×1
wpf ×1
xmlworker ×1