iTextSharpでpdfファイルを作成しようとしています。最初にpdfが作成されたのですが、プログラムで削除された場合、または上書きされた場合、次の例外が発生します。pdf上書きの例外C#(iTextSharp)
'/'アプリケーションでサーバーエラーが発生しました。
プロセスは、別のプロセスで使用されているため、 'C:\ Users \ g.michailou \ Desktop \ InfocomFinal \ barcodes \ 9880892102.pdf'というファイルにアクセスできません。ここでは、文書開いたままに、なぜ私にはわからない
が...私のサンプルコードは
private void CreatePdf(string first, string last, string value)
{
using (MemoryStream myMemoryStream = new MemoryStream())
{
Document document = new Document(PageSize.A4, 100, 100, 100, 100);
PdfWriter myPDFWriter = PdfWriter.GetInstance(document, myMemoryStream);
document.Open();
BaseFont MyFont = iTextSharp.text.pdf.BaseFont.CreateFont("C:\\Windows\\Fonts\\Arial.ttf", iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.EMBEDDED);
var titleFont = new iTextSharp.text.Font(MyFont, 16, iTextSharp.text.Font.BOLD);
var subTitleFont = new iTextSharp.text.Font(MyFont, 22, iTextSharp.text.Font.NORMAL);
var subTitleFont2 = new iTextSharp.text.Font(MyFont, 16, iTextSharp.text.Font.NORMAL);
var boldTableFont = new iTextSharp.text.Font(MyFont, 12, iTextSharp.text.Font.NORMAL);
var endingMessageFont = new iTextSharp.text.Font(MyFont, 10, iTextSharp.text.Font.ITALIC);
var bodyFont = new iTextSharp.text.Font(MyFont, 12, iTextSharp.text.Font.NORMAL);
var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/" + currentEvent + ".jpg"));
logo.ScaleToFit(395, 160);
document.Add(logo);
Helpers.GetEventInformation(currentEvent);
Paragraph name = new Paragraph(first, subTitleFont);
name.Alignment = 1;
name.SpacingBefore = 20;
document.Add(name);
Paragraph surname = new Paragraph(last, subTitleFont);
surname.Alignment = 1;
document.Add(surname);
Paragraph info1 = new Paragraph("Επιβεβαίωση Εγγραφής στο", subTitleFont2);
info1.Alignment = 1;
info1.SpacingBefore = 25;
document.Add(info1);
Paragraph info2 = new Paragraph(Helpers.confinfo, subTitleFont2);
info2.Alignment = 1;
document.Add(info2);
Paragraph info3 = new Paragraph(Helpers.maildate, titleFont);
info3.Alignment = 1;
info3.SpacingBefore = 25;
document.Add(info3);
Paragraph info4 = new Paragraph(Helpers.mailtime, subTitleFont2);
info4.Alignment = 1;
document.Add(info4);
document.Add(Chunk.NEWLINE);
document.Add(Chunk.NEWLINE);
var barcodeImage = iTextSharp.text.Image.GetInstance(Server.MapPath("~/barcodes/" + value + ".png"));
barcodeImage.Alignment = iTextSharp.text.Image.ALIGN_CENTER;
barcodeImage.SpacingBefore = 25;
document.Add(barcodeImage);
Paragraph barcodev = new Paragraph(value, endingMessageFont);
barcodev.SpacingBefore = -5;
barcodev.Alignment = 1;
document.Add(barcodev);
document.Add(Chunk.NEWLINE);
document.Add(Chunk.NEWLINE);
var logo2 = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/footer.jpg"));
logo2.SpacingBefore = 30;
logo2.ScaleToFit(395, 130);
document.Add(logo2);
document.Close();
byte[] content = myMemoryStream.ToArray();
pdfPath = Server.MapPath("~/barcodes/" + value + ".pdf");
using (FileStream fs = System.IO.File.Create(pdfPath))
{
fs.Write(content, 0, (int)content.Length);
}
}
}
万が一、Acrobatや他のpdfリーダーで開いていないのですか? –
@SamuelHuylebroeckいいえ私は –
まず、iTextSharpはあなたがあなたがあなたがPDF **メモリ**を作成するためにそれを使用するので、問題に完全に無関係です。 PDF形式であってもそれ自体は問題ではありません。 'byte [] content 'は他の方法で簡単に作成でき、あらゆる種類のバイトを含むことができます。したがって、タグ[tag:pdf]と[tag:itextsharp]を削除し、それらをSystem.IO.FileとWebサービスの使用に関連するタグで置き換える必要があります。 – mkl