• 締切済み

ASP(VB)にて動的に作成したPDF(stream)をZIPへ格納後の展開ができない

ASP(VB)にて動的に作成したPDF(stream)をZIPへ格納後、ダウンロードのプログラムを組んだのですが、ダウンロード後にZIPの中を展開するとPDFが 「ファイルの種類がサポートされていないか、または破損している可能性があります。例えば電子文書として送信され、正しくデコードされなかったことなどが考えられます。」 と表示されて開けません。 バイト数・圧縮率は正しく表示されているのですが何かソースとしてエンコード/デコード方法が足りてないのでしょうか? ご教授お願いします。 以下ソースです。( 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) zip.AddEntry(\"データ1.pdf\", \"\", teststream) \'ダウンロード出力 zip.Save(Response.OutputStream) End Using

みんなの回答

  • tochansa
  • ベストアンサー率76% (23/30)
回答No.1

すみません。コーディングしてる時間がないのでざっくりアドバイスだけ。 test2.txtの名称を単純にtest2.pdfと変更してもpdfファイルとして開くことはできないのはご存知ですか? ファイルの名前を変えただけではダメなんです。 中身のデータの構造をPDF形式に合うように変更してやらないといけないんです。 さてさて、sugizo0419さんのコードでは肝心の"PDF形式に合ったデータを作成"する部分が抜けているように見受けられます。 (Ionic.Zip.dllってzipするためのものでpdf作るためのものではないですよね?) なので、 1.まずは開けるPDFファイルを作成する 2.それをzip圧縮する という手順を踏む必要があると思われます。 1.についてはiText.NETという手段があるようです。ぐぐったらたくさん情報がありそうでした。 2.については既に手段をお持ちのようですので割愛します。 では。頑張ってください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ASP:動的に作成したPDFをアシュクしてダウンロード後の展開

    ASP(VB)にて動的に作成したPDF(stream)をZIPへ格納後、ダウンロードのプログラムを組んだのですが、ZIPの中を展開するとPDFが 「ファイルの種類がサポートされていないか、または破損している可能性があります。例えば電子文書として送信され、正しくデコードされなかったことなどが考えられます。」 と表示されて開けません。 バイト数・圧縮率は正しく表示されているのですが何かソースとしてエンコード/デコード方法が足りてないのでしょうか? ご教授お願いします。 以下ソースです。( 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) zip.AddEntry("データ1.pdf", "", teststream) 'ダウンロード出力 zip.Save(Response.OutputStream) End Using

  • 現在、ASP.NET(言語:VB.NET)にて、

    現在、ASP.NET(言語:VB.NET)にて、 データ参照、更新系のWebアプリケーションを自学しているものですが、 DAC(Data Access Componet)を利用してSQL Serverのデータを取得、更新する際、 コネクションの閉じ方が分からず困っています。 DACを使用しない場合は、 下記のようにSQLConnectionをUsing句で明示的に括り、 Closeさせることができますが、 DACを使用した場合はTableAdapterからSQLConnectionを取得できず、 同様の実装方法を採れません。 ------------------ Dim mySelectQuery As String = "SELECT * FROM Categories ORDER BY CategoryID" Dim myConnectString As String = "Persist Security Info=False;Integrated Security=SSPI;database=northwind;server=mySQLServer" Dim myCommand As New SqlCommand(mySelectQuery) Using conn AS SqlConnection = New SqlConnection(myConnectString) myCommand.Connection =conn myCommand.CommandTimeout = 15 myCommand.CommandType = CommandType.Text myCommand.ExecuteNonQuery() End Using ------------------ 一方、DACを使用した場合は下記のように実装しております。 ------------------ Dim ta As New SystemError_OriginalTableAdapters.OriginalTableAdapter Dim dt As New SystemError_OriginalDataTable ta.FillBy(dt, id) ' テーブルアダプターのFillメソッドを呼び出すのみで、Closeしているかどうかがわからない。 ------------------ DACでは、Fillメソッド実行後に必ずSQLConnectionがCloseされることが 保証されているなら問題は無いのですが、 そうでない場合、テーブルアダプターからSQLConnectionを取得して、 明示的にCloseさせてやりたいと思っています。 DACを使用した場合のSQLConnectionの取得方法、 もしくはSQLConnectionのCloseの方法についてご教授願えないでしょうか? 以上、宜しくお願いします。

  • FDF ToolkitでASPからPDFダウンロード

    FDF Toolkitを使用して、ASPからPDFをダウンロードさせようとしています。 ※DBから取得した値をPDFで表示&ダウンロード 環境はWindowsです。 テンプレート用FDFは不要としたいです。 ↓こちらを参考にして作ってみました。 ※http://www.linkclub.or.jp/~ma3ki/webutil/pdf/ringi2/howtomake-pdf2.html#ji 下記ソースは、リンクまたはボタンをクリックした時に呼ばれるASPファイル内のソースです。 ▼やりたい事 リンクまたはボタンクリックしたら、 DBから値を取得し、その値を埋め込んだxxxxx.pdfを開くダイアログを表示させる。 ダイアログの選択で、「開く」か、pdfファイルを「保存」するかを選択させたい。 ⇒開いたPDFをちゃんと表示させたい ⇒保存したPDFファイルもきちんと表示させたい ※FDFファイルは使わない形式でPDFを出力させたいのです。 ▼下記ソースがだめな点 ・ダイアログは表示されるのですが、「保存」を選択した場合に保存されたPDFが開けません。 ・「開く」を選択しても何も開かず固まってしまいます。 ・テンプレート用のPDFは用意しています。 ・サーバーには「FdfAcx.DLL」と「FdfTk.DLL」はインストール済みです。 全く見当違いな事をしているかもしれませんが、 いろいろ調べてみても全くわからないのです、、 どなたか同じ現象を体験した方、 また、解決方法をご存知の方がいらっしゃいましたら 何卒ご教授くださいませ。 よろしくお願いいたします。 【ASPソース】============================================================= Dim ObjFdfAcx Dim ObjresFDF Dim StrDateTime '現在日付取得 StrDateTime = Now() StrDateTime = Replace(StrDateTime, " ", "") StrDateTime = Replace(StrDateTime, "/", "") StrDateTime = Replace(StrDateTime, ":", "") 'ダウンロードファイル名設定 StrPDFFileName = "TEST_" & StrDateTime & ".pdf" 'FDF ActiveX オブジェクトの定義 Set ObjFdfAcx = Server.CreateObject("FdfApp.FdfApp") '新しいFDF生成 Set ObjresFDF = ObjFdfAcx.FDFCreate 'テンプレートFDF内の変数(/V key)に値を設定 With ObjresFDF '値セット .FDFSetValue "TEST1","TEST1",False .FDFSetValue "TEST2","TEST2",False 'テンプレートPDFのURLセット .FDFSetFile "http://XXXXX/テンプレート用PDF.pdf" End With '設定結果のFDFをファイル名を付けてクライアントでダウンロード With Response .ContentType = "application/vnd.fdf" 'MIMEタイプ FDF '.ContentType = "application/pdf" 'ダウンロード '.AddHeader "Content-Disposition","attachment; filename=" & StrPDFFileName '表示 .BinaryWrite ObjresFDF.FDFSaveToBuf End With 'クローズ ObjresFDF.FDFClose 'オブジェクト開放 Set ObjresFDF = Nothing Set ObjFdfAcx = Nothing

  • ウェブ内容をshift-jis変換するには?

    続けての質問になってしまいます。 VB.NET で、ウェブクライアントで下記のようにウェブページの内容を取得しましたが、 コードがUTF?のため日本語で表示されません。 内容を変数に格納し、shift-jis変換するにはどのように記述すればよいのでしょうか? Dim webClient As New System.Net.WebClient Dim sr As System.IO.Stream = webClient.OpenRead("http://www.nikkei.co.jp/") Dim srRead As New System.IO.StreamReader(sr) TextBox1.Text = srRead.ReadToEnd  よろしくお願いします。

  • HTTP接続すると文字化けがおこってしまいます

    VB2005です。 HTTPサーバーに接続してデータをテキストボックスに書き出す処理なのですが、どうしても文字化けしてしまい困っています。どうしたらよいでしょうか? Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' HTTPサーバーへ接続する Dim client As New WebClient Try ' HTTPサーバーへ接続しストリームを取得する Dim stream As System.IO.Stream = _ client.OpenRead(TextBox1.Text) ' テキストボックスへ結果を書き出す Dim reader As New System.IO.StreamReader(stream) TextBox2.Text = reader.ReadToEnd() reader.Close() stream.Close() Catch ex As WebException ' URLが不正の場合は例外が発生する MessageBox.Show(ex.Message) End Try End Sub

  • VB6.0にてStreamReaderを使用したいのですが、

    VB6.0にてStreamReaderを使用したいのですが、 Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", のコードが赤字でエラーになります。 どう修正すればよろしいでしょうか? ご存知の方教えてください。よろしくお願いします。 Dim strTemp As String Dim Reader As New IO.StreamReader("C:\Windows\System32\eula.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) strTemp = Reader.ReadToEnd msgobox strTemp Reader.Close

  • VB2005で作成したエクセルファイルに問題が・・・。

    お世話になっております。 VB2005にてまず大元のエクセルファイルを分割し、別ツールにて分割したファイルを読み込み、その後に読み込んだファイルを処理をしようとしています。 先に質問させていただき、分割はVBAコードを改変することで可能となりました。 http://oshiete1.goo.ne.jp/qa3739293.html(以前の質問です。) 問題は、その分割したファイルを当方の別ツールにてStreamReaderで読み込んだ際に起こります。 20行づつに分割したエクセルファイルでは、20行目以降には文字列は入っておりませんが、StreamReaderで読み込むと20行以上(もしくは以下)読み込んでしまい、ファイル内の情報を正しく読み取ってくれません。 ファイルの作成方法に問題があるのでしょうか。 それとも、StreamReaderではなく、別の方法で最終行までの文字列を読み込んだほうがいいのでしょうか。 ご教示いただければ幸いに思います。 宜しくお願いいたします。 以下、作成したコードです。 ~分割するコード~ Dim xlApp As Object = CreateObject("Excel.Application") Dim xlwb As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Open(TextBox1.Text) Dim xlsheet As Microsoft.Office.Interop.Excel.Worksheet xlsheet = xlwb.Worksheets("Sheet1") Dim d As String d = xlsheet.Range("A65536").End(Excel.XlDirection.xlUp).Row Dim sh1 As Excel.Worksheet sh1 = xlwb.Worksheets("Sheet1") '元データシート Dim rs As Integer = 20 Dim i As Integer Dim m As String = 1 MsgBox(d + "件ありました(=゜ω゜)ノ") '分割フォルダを作成 System.IO.Directory.CreateDirectory(System.IO.Directory.GetCurrentDirectory() + "\分割フォルダ") Dim s As Integer = 1 For i = 1 To d Step rs Dim dire As String = (System.IO.Directory.GetCurrentDirectory()) Dim xlFilePath As String = (dire + "\分割フォルダ\" + m + "つ目.csv") Dim xlApp3 As Object = CreateObject("Excel.Application") Dim xlwb3 As Microsoft.Office.Interop.Excel.Workbook = xlApp3.Workbooks.add Dim xlsheet3 As Microsoft.Office.Interop.Excel.Worksheet xlApp3.DisplayAlerts = False xlsheet3 = xlwb3.Worksheets("Sheet1") sh1.Range(sh1.Cells(s, "A"), sh1.Cells(s + rs - 1, "B")).Copy() xlsheet3.Paste() xlsheet3.SaveAs(xlFilePath) xlwb3.Close(True) xlApp3 = Nothing xlwb3 = Nothing xlsheet3 = Nothing m += 1 s = s + rs Next i MsgBox("分割OK♪") xlwb.Close(True) xlApp = Nothing xlwb = Nothing xlsheet = Nothing ~ファイルを読み込むコード~ Dim hReader As New System.IO.StreamReader(FileName) Dim lCount As Int64 While (hReader.Peek() >= 0) hReader.ReadLine() lCount += 1 End While MsgBox(lCount) hReader.Close()

  • ASP.Net(VB)のエラーについて

    始めまして 以下の現象が発生し、解決方法がわからず困っています。 コンパイル エラー メッセージ: BC30002: 型 'NewActiveReport1' が定義されていません。 ソース エラー: 行 6: Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 行 7: Dim lintRowCtr As Integer 行 8: Dim rpt As New NewActiveReport1 行 9: 行 10: 'テーブル内容を初期化 ソース ファイル: c:\inetpub\wwwroot\metabolic\metabolic_system\supportobjectlist.aspx.vb 行: 8 開発環境: OS:WindowsVista 言語:ASP.net (VB) 実行環境: OS:Windows Server 2003 IIS Ver6.0 .NetFramework 2.0 以上の環境下で開発、検証を行っていますが ActiveReportの宣言でエラーが発生しております。 ActiveReportのインストールでサンプルプログラムを実行した時 は正常に動作いたしましたが、そのサンプルプログラムを元に 作成したプログラムが上記のエラーとなって動作しません。 IISの環境設定が間違っているのか、VB.Netの設定が間違っているのか まったくわからない状態となっています。 何かしらのヒントでも良いので、よろしくお願い致します。

  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。

  • VB.NETでファイル操作

    ファイルをオープンしたまま、ファイル内のデータを何度も読み込みたいのですが、Seekで読み込み位置を先頭にし、Peekでループさせ、一度全部読み込み終わった後、Seek文で先頭に戻し、再度ファイルの先頭から読み込ませようと思ったのですができません。 なぜなのでしょうか? // ファイルオープン StreamReader sr = new StreamReader( (System.IO.Stream) File.OpenRead("C:\\Temp\\Test.txt"), System.Text.Encoding.ASCII); // 最後まで読み出す sr.BaseStream.Seek(0, SeekOrigin.Begin); while (sr.Peek() > -1) { Console.WriteLine(sr.ReadLine()); } // もう一度 sr.BaseStream.Seek(0, SeekOrigin.Begin); while (sr.Peek() > -1) {         ←このWhileの中に入らない。 Console.WriteLine(sr.ReadLine()); } // ファイルクローズ sr.Close();