DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ASP.NETにてテキストを読み込んでPDFにする方法

環境/言語:[XP .NET Framework 2.0]
分類:[ASP.NET]

2009/10/23(Fri) 17:39:23 編集(投稿者)
2009/10/23(Fri) 17:37:43 編集(投稿者)

いつも拝見させていただういています。

早速ですが、ASP.NETにてテキストを読み込んでPDFにする方法を教えてください。

したいことは以下の通りです。

@stremreader(読み込みファイル名)

AstreamをPDF構造に変換

BstreamからPDFファイルを作成する(ZIPへ)

C作成したPDFをZIPでダウンロード

以下ソースです。( Ionic.Zip.dll使用)

’@
Dim teststream As Stream
Dim streamRE As StreamReader = New StreamReader("C:\\test2.txt\")

teststream = streamRE.BaseStream

Response.Clear()
Response.ContentType = "application/zip\"
Response.AddHeader("content-disposition\", "filename=data.zip\")
Dim zip As Ionic.Zip.ZipFile = New Ionic.Zip.ZipFile(Encoding.GetEncoding(\"shift_jis\"))

Using (zip)
    ’Bファイル作成
    zip.AddEntry("データ1.pdf\", "\", teststream)

    'Cダウンロード出力
    zip.Save(Response.OutputStream)
End Using


基本的にファイルはどこにも作成せずに最後のZIPダウンロードへ持っていきたいのです。
AのstreamをPDF化構造に変換の処理ができればと考えているのですが方法が見当たらずに苦戦しています。
(iTextSharpなどは一時的にどこかに保存しないといけないようなので他の方法を探しています。)

すいませんがご教授ください。
■No25649に返信(すぎぞ〜さんの記事)
> 基本的にファイルはどこにも作成せずに最後のZIPダウンロードへ持っていきたいのです。
> AのstreamをPDF化構造に変換の処理ができればと考えているのですが方法が見当たらずに苦戦しています。
> (iTextSharpなどは一時的にどこかに保存しないといけないようなので他の方法を探しています。)

  ZIP圧縮以降なら・・・
  http://dobon.net/vb/dotnet/links/createzipfile.html

  これ使ってできます。
  尚、中間ファイルを作成しないで・・・となると、PDF化した
  ものをBYTE配列かSBYTE配列にさせもてれば

  java.io.ByteArrayInputStream
  java.io.ByteArrayOutputStream

  を使って、圧縮・出力できると思います。

※ 欲しいところ半分までで申し訳ない・・・

以上。参考まで
2009/10/25(Sun) 23:18:11 編集(投稿者)

■No25649に返信(すぎぞ〜さんの記事)
> (iTextSharpなどは一時的にどこかに保存しないといけないようなので他の方法を探しています。)

iTextSharp にて MemoryStream に書き込んでみてはいかがでしょうか。

Private Sub responseZip()
    Response.Clear()
    Response.ContentType = "application/zip"
    Response.AddHeader("content-disposition", "filename=morio.zip")

    Using zip As New ZipFile()
        zip.AddEntry("morio.pdf", "", pdf())
        zip.Save(Response.OutputStream)
    End Using

    Response.End()
End Sub

Private Function pdf() As Byte()
    Using memory As New MemoryStream()
        Dim doc As New Document()
        PdfWriter.GetInstance(doc, memory)
        doc.Open()
        doc.Add(New Paragraph("hello text2"))
        doc.Close()
        Return memory.GetBuffer()
    End Using
End Function
■No25658に返信(もりおさんの記事)
> 2009/10/25(Sun) 23:18:11 編集(投稿者)
>
> ■No25649に返信(すぎぞ〜さんの記事)
>>(iTextSharpなどは一時的にどこかに保存しないといけないようなので他の方法を探しています。)
>
> iTextSharp にて MemoryStream に書き込んでみてはいかがでしょうか。

  横からすいません。

  をを〜できますネ!

  ただ、PDFのサイズがそう大きくないなら大丈夫かと。
  巨大なPDFならメモリを食いますので、IIS落ちないかナ〜って
  若干心配が残ります。

  サイズ的には、どの程度のPDFファイルなんでしょうか・・・

以上。
オショウサン、もりおさんありがとうございます!!

なるほど★
これなら読み込んだストリームをバイト配列にしてPDFが作成できそうです!^^

ちなみに
> サイズ的には、どの程度のPDFファイルなんでしょうか・・・

100MB以内のPDFを最大で20個ほど圧縮する予定です。
逆に質問で申し訳ないのですが、IISが落ちる基準は大体どのぐらいなのでしょうか??

現在別作業が忙しく、コーディングが28日になるのでそこでまた結果連絡させていただきます★
■No25672に返信(すぎぞ〜さんの記事)
> 100MB以内のPDFを最大で20個ほど圧縮する予定です。

  経験的には、大きいように思います。
  Webなんで、同時に実行されることが無いならば、そう心配
  することはありませんが、複数セッションで行われた場合
  には、1セッションあたり瞬間的には、最大200MBメモリを
  食うような事態になりますので、スワップすることを含め
  パフォーマンスやメモリ容量等注意する必要があろうかと。

> 逆に質問で申し訳ないのですが、IISが落ちる基準は大体どのぐらいなのでしょうか??

  落ちないなら落ちないし・・・落ちる場合は落ちる。

  何はともあれ、CPU負荷や使ったメモリの迅速な開放が必要
  だろうと思います。

※ テンポラリ用ファイルを作りたくない・・・と言うことですが
  フォルダの権限を適切に設定して、.NETでシステムサービスを
  つくり、テンポラリフォルダを監視させ、ファイル(PDF)が
  生成されたら、圧縮して別のフォルダに出力させ、それを待っ
  てダウンロードさせる・・・

  みたいな方法だと、IISに負荷はかからずに安心かと・・・

  過去、そういう方法を使ったことあります。

以上。参考まで

DOBON.NET | プログラミング道 | プログラミング掲示板