|
分類:[VB.NET/VB2005 以降]
VB2008のZipPackageというものを使用してzipファイルを作成しようとしているのですが、
pdfやWordファイルを圧縮しようとすると、圧縮サイズが元のサイズを超えてしまい、
元のファイルサイズよりも大きくなってしまいます。
Imports System.IO
Imports System.IO.Packaging
Public Class Test
Private Sub ZipTest()
Dim strFile As String = "(パス)\test.pdf"
Using zip As ZipPackage = ZipPackage.Open(strFile, FileMode.Create)
Dim zpp As ZipPackagePart = zip.CreatePart(New Uri("/test.pdf", UriKind.Relative), _
System.Net.Mime.MediaTypeNames.Application.Octet, _
CompressionOption.Maximum)
Using fs As New FileStream(strFile, FileMode.Open, FileAccess.Read)
CopyStream(fs, zpp.GetStream())
End Using
End Using
End Sub
Private Sub CopyStream(ByVal srmSrc As Stream, ByVal srmDst As Stream)
Const BUFFER_SIZE As Integer = &H1000
Dim byt(BUFFER_SIZE) As Byte
Dim intByteRead As Integer = 0
Do
intByteRead = srmSrc.Read(byt, 0, BUFFER_SIZE)
If intByteRead > 0 Then
srmDst.Write(byt, 0, intByteRead)
Else
Exit Do
End If
Loop
End Sub
End Class
また、zip.CreatePartの第2引数に、ファイルに対応するContentType(上記例でいうと"application/pdf")を設定しても、
圧縮サイズが元のサイズより大きくなってしまいます。
それと、テキストファイルは圧縮されますが、Wordのファイル(この時は.doc形式)のファイルは上記pdfの例と同様、
圧縮サイズが元のサイズより大きくなってしまいます。
なお、zip.CreatePartの第3引数をCompressionOption.NotCompressedにすると、元のファイルのサイズでzip化されます。
どうすればZipPackageを使用してファイルを圧縮できるでしょうか?
よろしくお願いします。
|