Changed file to writer/reader

This commit is contained in:
Jeroen Bobbeldijk
2017-09-23 16:37:39 +02:00
parent 08040f9140
commit 679656fb8d
9 changed files with 121 additions and 70 deletions

View File

@@ -1,12 +1,12 @@
package sign
import (
"bytes"
"compress/zlib"
"encoding/binary"
"encoding/hex"
"errors"
"strconv"
"encoding/hex"
"compress/zlib"
"bytes"
"encoding/binary"
)
func (context *SignContext) writeXref() error {
@@ -31,12 +31,12 @@ func (context *SignContext) writeXrefTable() error {
xref_size := "xref\n0 " + strconv.FormatInt(context.PDFReader.XrefInformation.ItemCount, 10)
new_xref_size := "xref\n0 " + strconv.FormatInt(context.PDFReader.XrefInformation.ItemCount+4, 10)
if _, err := context.OutputFile.Write([]byte(new_xref_size)); err != nil {
if _, err := context.OutputBuffer.Write([]byte(new_xref_size)); err != nil {
return err
}
// Write the old xref table to the output pdf.
if err := writePartFromSourceFileToTargetFile(context.InputFile, context.OutputFile, context.PDFReader.XrefInformation.StartPos+int64(len(xref_size)), context.PDFReader.XrefInformation.Length-int64(len(xref_size))); err != nil {
if err := writePartFromSourceFileToTargetFile(context.InputFile, context.OutputBuffer, context.PDFReader.XrefInformation.StartPos+int64(len(xref_size)), context.PDFReader.XrefInformation.Length-int64(len(xref_size))); err != nil {
return err
}
@@ -45,7 +45,7 @@ func (context *SignContext) writeXrefTable() error {
visual_signature_xref_line := leftPad(visual_signature_object_start_position, "0", 10-len(visual_signature_object_start_position)) + " 00000 n \n"
// Write the new catalog xref line.
if _, err := context.OutputFile.Write([]byte(visual_signature_xref_line)); err != nil {
if _, err := context.OutputBuffer.Write([]byte(visual_signature_xref_line)); err != nil {
return err
}
@@ -54,7 +54,7 @@ func (context *SignContext) writeXrefTable() error {
catalog_xref_line := leftPad(catalog_object_start_position, "0", 10-len(catalog_object_start_position)) + " 00000 n \n"
// Write the new catalog xref line.
if _, err := context.OutputFile.Write([]byte(catalog_xref_line)); err != nil {
if _, err := context.OutputBuffer.Write([]byte(catalog_xref_line)); err != nil {
return err
}
@@ -63,7 +63,7 @@ func (context *SignContext) writeXrefTable() error {
info_xref_line := leftPad(info_object_start_position, "0", 10-len(info_object_start_position)) + " 00000 n \n"
// Write the new signature xref line.
if _, err := context.OutputFile.Write([]byte(info_xref_line)); err != nil {
if _, err := context.OutputBuffer.Write([]byte(info_xref_line)); err != nil {
return err
}
@@ -72,7 +72,7 @@ func (context *SignContext) writeXrefTable() error {
signature_xref_line := leftPad(signature_object_start_position, "0", 10-len(signature_object_start_position)) + " 00000 n \n"
// Write the new signature xref line.
if _, err := context.OutputFile.Write([]byte(signature_xref_line)); err != nil {
if _, err := context.OutputBuffer.Write([]byte(signature_xref_line)); err != nil {
return err
}
@@ -107,7 +107,6 @@ func (context *SignContext) writeXrefStream() error {
}
}
new_info := "Info " + strconv.FormatInt(int64(context.InfoData.ObjectId), 10) + " 0 R"
new_root := "Root " + strconv.FormatInt(int64(context.CatalogData.ObjectId), 10) + " 0 R"
@@ -116,21 +115,21 @@ func (context *SignContext) writeXrefStream() error {
id0 := hex.EncodeToString([]byte(id.Index(0).RawString()))
id1 := hex.EncodeToString([]byte(id.Index(0).RawString()))
new_xref := strconv.Itoa(int(context.SignData.ObjectId + 1)) + " 0 obj\n"
new_xref += "<< /Type /XRef /Length " + strconv.Itoa(len(streamBytes)) + " /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Prev " + strconv.FormatInt(context.PDFReader.XrefInformation.StartPos, 10) + " /Size " + strconv.FormatInt(context.PDFReader.XrefInformation.ItemCount+5, 10) + " /Index [ " + strconv.FormatInt(context.PDFReader.XrefInformation.ItemCount, 10) + " 5 ] /" + new_info + " /" + new_root + " /ID [<" + id0 + "><" + id1 + ">] >>\n"
if _, err := context.OutputFile.Write([]byte(new_xref)); err != nil {
new_xref := strconv.Itoa(int(context.SignData.ObjectId+1)) + " 0 obj\n"
new_xref += "<< /Type /XRef /Length " + strconv.Itoa(len(streamBytes)) + " /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Prev " + strconv.FormatInt(context.PDFReader.XrefInformation.StartPos, 10) + " /Size " + strconv.FormatInt(context.PDFReader.XrefInformation.ItemCount+5, 10) + " /Index [ " + strconv.FormatInt(context.PDFReader.XrefInformation.ItemCount, 10) + " 5 ] /" + new_info + " /" + new_root + " /ID [<" + id0 + "><" + id1 + ">] >>\n"
if _, err := context.OutputBuffer.Write([]byte(new_xref)); err != nil {
return err
}
if _, err := context.OutputFile.Write([]byte("stream\n")); err != nil {
if _, err := context.OutputBuffer.Write([]byte("stream\n")); err != nil {
return err
}
if _, err := context.OutputFile.Write(streamBytes); err != nil {
if _, err := context.OutputBuffer.Write(streamBytes); err != nil {
return err
}
if _, err := context.OutputFile.Write([]byte("\nendstream\n")); err != nil {
if _, err := context.OutputBuffer.Write([]byte("\nendstream\n")); err != nil {
return err
}
@@ -138,9 +137,9 @@ func (context *SignContext) writeXrefStream() error {
}
func writeXrefStreamLine(b *bytes.Buffer, xreftype byte, offset int, gen byte) {
b.WriteByte(xreftype);
b.Write(encodeInt(offset));
b.WriteByte(gen);
b.WriteByte(xreftype)
b.Write(encodeInt(offset))
b.WriteByte(gen)
}
func encodeInt(i int) []byte {
@@ -178,7 +177,6 @@ func EncodePNGSUBBytes(columns int, data []byte) ([]byte, error) {
return b.Bytes(), nil
}
func EncodePNGUPBytes(columns int, data []byte) ([]byte, error) {
rowCount := len(data) / columns
if len(data)%columns != 0 {
@@ -215,4 +213,4 @@ func EncodePNGUPBytes(columns int, data []byte) ([]byte, error) {
w.Close()
return b.Bytes(), nil
}
}