mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-07-10 16:22:22 +03:00
py3k: Convert StringIO.StringIO to io.BytesIO
io.BytesIO is already in 2.6. Some of the more obvious bytes literals are marked in this commit.
This commit is contained in:
parent
dda0e9a3ed
commit
260c1fad14
|
@ -12,7 +12,7 @@
|
||||||
# See the README file for information on usage and redistribution.
|
# See the README file for information on usage and redistribution.
|
||||||
#
|
#
|
||||||
|
|
||||||
from StringIO import StringIO
|
from io import BytesIO
|
||||||
|
|
||||||
##
|
##
|
||||||
# The <b>ImageFileIO</b> module can be used to read an image from a
|
# The <b>ImageFileIO</b> module can be used to read an image from a
|
||||||
|
@ -23,7 +23,7 @@ from StringIO import StringIO
|
||||||
#
|
#
|
||||||
# @see ImageFile#Parser
|
# @see ImageFile#Parser
|
||||||
|
|
||||||
class ImageFileIO(StringIO):
|
class ImageFileIO(BytesIO):
|
||||||
|
|
||||||
##
|
##
|
||||||
# Adds buffering to a stream file object, in order to
|
# Adds buffering to a stream file object, in order to
|
||||||
|
@ -36,4 +36,4 @@ class ImageFileIO(StringIO):
|
||||||
|
|
||||||
def __init__(self, fp):
|
def __init__(self, fp):
|
||||||
data = fp.read()
|
data = fp.read()
|
||||||
StringIO.__init__(self, data)
|
BytesIO.__init__(self, data)
|
||||||
|
|
|
@ -255,12 +255,12 @@ def load_path(filename):
|
||||||
|
|
||||||
def load_default():
|
def load_default():
|
||||||
"Load a default font."
|
"Load a default font."
|
||||||
from StringIO import StringIO
|
from io import BytesIO
|
||||||
import base64
|
import base64
|
||||||
f = ImageFont()
|
f = ImageFont()
|
||||||
f._load_pilfont_data(
|
f._load_pilfont_data(
|
||||||
# courB08
|
# courB08
|
||||||
StringIO(base64.decodestring('''
|
BytesIO(base64.decodestring(b'''
|
||||||
UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
@ -352,7 +352,7 @@ AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA
|
||||||
pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG
|
pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG
|
||||||
AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA////
|
AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA////
|
||||||
+QAGAAIAzgAKANUAEw==
|
+QAGAAIAzgAKANUAEw==
|
||||||
''')), Image.open(StringIO(base64.decodestring('''
|
''')), Image.open(BytesIO(base64.decodestring(b'''
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u
|
iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u
|
||||||
Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9
|
Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9
|
||||||
M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g
|
M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g
|
||||||
|
@ -385,8 +385,8 @@ if __name__ == "__main__":
|
||||||
font = "../Images/courB08"
|
font = "../Images/courB08"
|
||||||
print(" f._load_pilfont_data(")
|
print(" f._load_pilfont_data(")
|
||||||
print(" # %s" % os.path.basename(font))
|
print(" # %s" % os.path.basename(font))
|
||||||
print(" StringIO(base64.decodestring('''")
|
print(" BytesIO(base64.decodestring(b'''")
|
||||||
base64.encode(open(font + ".pil", "rb"), sys.stdout)
|
base64.encode(open(font + ".pil", "rb"), sys.stdout)
|
||||||
print("''')), Image.open(StringIO(base64.decodestring('''")
|
print("''')), Image.open(BytesIO(base64.decodestring(b'''")
|
||||||
base64.encode(open(font + ".pbm", "rb"), sys.stdout)
|
base64.encode(open(font + ".pbm", "rb"), sys.stdout)
|
||||||
print("'''))))")
|
print("'''))))")
|
||||||
|
|
|
@ -67,6 +67,6 @@ def grabclipboard():
|
||||||
data = Image.core.grabclipboard(debug)
|
data = Image.core.grabclipboard(debug)
|
||||||
if Image.isStringType(data):
|
if Image.isStringType(data):
|
||||||
from . import BmpImagePlugin
|
from . import BmpImagePlugin
|
||||||
import StringIO
|
import io
|
||||||
return BmpImagePlugin.DibImageFile(StringIO.StringIO(data))
|
return BmpImagePlugin.DibImageFile(io.BytesIO(data))
|
||||||
return data
|
return data
|
||||||
|
|
|
@ -92,8 +92,8 @@ class PhotoImage:
|
||||||
image = Image.open(kw["file"])
|
image = Image.open(kw["file"])
|
||||||
del kw["file"]
|
del kw["file"]
|
||||||
elif "data" in kw:
|
elif "data" in kw:
|
||||||
from StringIO import StringIO
|
from io import BytesIO
|
||||||
image = Image.open(StringIO(kw["data"]))
|
image = Image.open(BytesIO(kw["data"]))
|
||||||
del kw["data"]
|
del kw["data"]
|
||||||
|
|
||||||
if hasattr(image, "mode") and hasattr(image, "size"):
|
if hasattr(image, "mode") and hasattr(image, "size"):
|
||||||
|
@ -224,8 +224,8 @@ class BitmapImage:
|
||||||
image = Image.open(kw["file"])
|
image = Image.open(kw["file"])
|
||||||
del kw["file"]
|
del kw["file"]
|
||||||
elif "data" in kw:
|
elif "data" in kw:
|
||||||
from StringIO import StringIO
|
from io import BytesIO
|
||||||
image = Image.open(StringIO(kw["data"]))
|
image = Image.open(BytesIO(kw["data"]))
|
||||||
del kw["data"]
|
del kw["data"]
|
||||||
|
|
||||||
self.__mode = image.mode
|
self.__mode = image.mode
|
||||||
|
|
|
@ -220,7 +220,7 @@ Image.register_extension("IPTC", ".iim")
|
||||||
def getiptcinfo(im):
|
def getiptcinfo(im):
|
||||||
|
|
||||||
from . import TiffImagePlugin, JpegImagePlugin
|
from . import TiffImagePlugin, JpegImagePlugin
|
||||||
import StringIO
|
import io
|
||||||
|
|
||||||
data = None
|
data = None
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ def getiptcinfo(im):
|
||||||
|
|
||||||
# parse the IPTC information chunk
|
# parse the IPTC information chunk
|
||||||
im.info = {}
|
im.info = {}
|
||||||
im.fp = StringIO.StringIO(data)
|
im.fp = io.BytesIO(data)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
im._open()
|
im._open()
|
||||||
|
|
|
@ -362,7 +362,7 @@ class JpegImageFile(ImageFile.ImageFile):
|
||||||
# and is likely to be replaced with something better in a future
|
# and is likely to be replaced with something better in a future
|
||||||
# version.
|
# version.
|
||||||
from . import TiffImagePlugin
|
from . import TiffImagePlugin
|
||||||
import StringIO
|
import io
|
||||||
def fixup(value):
|
def fixup(value):
|
||||||
if len(value) == 1:
|
if len(value) == 1:
|
||||||
return value[0]
|
return value[0]
|
||||||
|
@ -373,7 +373,7 @@ class JpegImageFile(ImageFile.ImageFile):
|
||||||
data = self.info["exif"]
|
data = self.info["exif"]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return None
|
return None
|
||||||
file = StringIO.StringIO(data[6:])
|
file = io.BytesIO(data[6:])
|
||||||
head = file.read(8)
|
head = file.read(8)
|
||||||
exif = {}
|
exif = {}
|
||||||
# process dictionary
|
# process dictionary
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
import StringIO
|
import io
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
def i16(c, o = 0):
|
def i16(c, o = 0):
|
||||||
|
@ -81,7 +81,7 @@ WORD_CLSID = "00020900-0000-0000-C000-000000000046"
|
||||||
#
|
#
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
|
||||||
class _OleStream(StringIO.StringIO):
|
class _OleStream(io.BytesIO):
|
||||||
|
|
||||||
"""OLE2 Stream
|
"""OLE2 Stream
|
||||||
|
|
||||||
|
@ -107,11 +107,11 @@ class _OleStream(StringIO.StringIO):
|
||||||
data.append(fp.read(sectorsize))
|
data.append(fp.read(sectorsize))
|
||||||
sect = fat[sect]
|
sect = fat[sect]
|
||||||
|
|
||||||
data = "".join(data)
|
data = b"".join(data)
|
||||||
|
|
||||||
# print len(data), size
|
# print len(data), size
|
||||||
|
|
||||||
StringIO.StringIO.__init__(self, data[:size])
|
io.BytesIO.__init__(self, data[:size])
|
||||||
|
|
||||||
#
|
#
|
||||||
# --------------------------------------------------------------------
|
# --------------------------------------------------------------------
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
__version__ = "0.4"
|
__version__ = "0.4"
|
||||||
|
|
||||||
from . import Image, ImageFile
|
from . import Image, ImageFile
|
||||||
import StringIO
|
import io
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -37,16 +37,16 @@ import StringIO
|
||||||
# 5. page contents
|
# 5. page contents
|
||||||
|
|
||||||
def _obj(fp, obj, **dict):
|
def _obj(fp, obj, **dict):
|
||||||
fp.write("%d 0 obj\n" % obj)
|
fp.write(b"%d 0 obj\n" % obj)
|
||||||
if dict:
|
if dict:
|
||||||
fp.write("<<\n")
|
fp.write(b"<<\n")
|
||||||
for k, v in dict.items():
|
for k, v in dict.items():
|
||||||
if v is not None:
|
if v is not None:
|
||||||
fp.write("/%s %s\n" % (k, v))
|
fp.write(b"/%s %s\n" % (k, v))
|
||||||
fp.write(">>\n")
|
fp.write(b">>\n")
|
||||||
|
|
||||||
def _endobj(fp):
|
def _endobj(fp):
|
||||||
fp.write("endobj\n")
|
fp.write(b"endobj\n")
|
||||||
|
|
||||||
##
|
##
|
||||||
# (Internal) Image save plugin for the PDF format.
|
# (Internal) Image save plugin for the PDF format.
|
||||||
|
@ -60,8 +60,8 @@ def _save(im, fp, filename):
|
||||||
|
|
||||||
xref = [0]*(5+1) # placeholders
|
xref = [0]*(5+1) # placeholders
|
||||||
|
|
||||||
fp.write("%PDF-1.2\n")
|
fp.write(b"%PDF-1.2\n")
|
||||||
fp.write("% created by PIL PDF driver " + __version__ + "\n")
|
fp.write(b"% created by PIL PDF driver " + __version__ + "\n")
|
||||||
|
|
||||||
#
|
#
|
||||||
# Get image characteristics
|
# Get image characteristics
|
||||||
|
@ -76,34 +76,34 @@ def _save(im, fp, filename):
|
||||||
params = None
|
params = None
|
||||||
|
|
||||||
if im.mode == "1":
|
if im.mode == "1":
|
||||||
filter = "/ASCIIHexDecode"
|
filter = b"/ASCIIHexDecode"
|
||||||
colorspace = "/DeviceGray"
|
colorspace = b"/DeviceGray"
|
||||||
procset = "/ImageB" # grayscale
|
procset = b"/ImageB" # grayscale
|
||||||
bits = 1
|
bits = 1
|
||||||
elif im.mode == "L":
|
elif im.mode == "L":
|
||||||
filter = "/DCTDecode"
|
filter = b"/DCTDecode"
|
||||||
# params = "<< /Predictor 15 /Columns %d >>" % (width-2)
|
# params = "<< /Predictor 15 /Columns %d >>" % (width-2)
|
||||||
colorspace = "/DeviceGray"
|
colorspace = b"/DeviceGray"
|
||||||
procset = "/ImageB" # grayscale
|
procset = b"/ImageB" # grayscale
|
||||||
elif im.mode == "P":
|
elif im.mode == "P":
|
||||||
filter = "/ASCIIHexDecode"
|
filter = b"/ASCIIHexDecode"
|
||||||
colorspace = "[ /Indexed /DeviceRGB 255 <"
|
colorspace = b"[ /Indexed /DeviceRGB 255 <"
|
||||||
palette = im.im.getpalette("RGB")
|
palette = im.im.getpalette("RGB")
|
||||||
for i in range(256):
|
for i in range(256):
|
||||||
r = ord(palette[i*3])
|
r = ord(palette[i*3])
|
||||||
g = ord(palette[i*3+1])
|
g = ord(palette[i*3+1])
|
||||||
b = ord(palette[i*3+2])
|
b = ord(palette[i*3+2])
|
||||||
colorspace = colorspace + "%02x%02x%02x " % (r, g, b)
|
colorspace = colorspace + b"%02x%02x%02x " % (r, g, b)
|
||||||
colorspace = colorspace + "> ]"
|
colorspace = colorspace + b"> ]"
|
||||||
procset = "/ImageI" # indexed color
|
procset = b"/ImageI" # indexed color
|
||||||
elif im.mode == "RGB":
|
elif im.mode == "RGB":
|
||||||
filter = "/DCTDecode"
|
filter = b"/DCTDecode"
|
||||||
colorspace = "/DeviceRGB"
|
colorspace = b"/DeviceRGB"
|
||||||
procset = "/ImageC" # color images
|
procset = b"/ImageC" # color images
|
||||||
elif im.mode == "CMYK":
|
elif im.mode == "CMYK":
|
||||||
filter = "/DCTDecode"
|
filter = b"/DCTDecode"
|
||||||
colorspace = "/DeviceCMYK"
|
colorspace = b"/DeviceCMYK"
|
||||||
procset = "/ImageC" # color images
|
procset = b"/ImageC" # color images
|
||||||
else:
|
else:
|
||||||
raise ValueError("cannot save mode %s" % im.mode)
|
raise ValueError("cannot save mode %s" % im.mode)
|
||||||
|
|
||||||
|
@ -111,25 +111,25 @@ def _save(im, fp, filename):
|
||||||
# catalogue
|
# catalogue
|
||||||
|
|
||||||
xref[1] = fp.tell()
|
xref[1] = fp.tell()
|
||||||
_obj(fp, 1, Type = "/Catalog",
|
_obj(fp, 1, Type = b"/Catalog",
|
||||||
Pages = "2 0 R")
|
Pages = b"2 0 R")
|
||||||
_endobj(fp)
|
_endobj(fp)
|
||||||
|
|
||||||
#
|
#
|
||||||
# pages
|
# pages
|
||||||
|
|
||||||
xref[2] = fp.tell()
|
xref[2] = fp.tell()
|
||||||
_obj(fp, 2, Type = "/Pages",
|
_obj(fp, 2, Type = b"/Pages",
|
||||||
Count = 1,
|
Count = 1,
|
||||||
Kids = "[4 0 R]")
|
Kids = b"[4 0 R]")
|
||||||
_endobj(fp)
|
_endobj(fp)
|
||||||
|
|
||||||
#
|
#
|
||||||
# image
|
# image
|
||||||
|
|
||||||
op = StringIO.StringIO()
|
op = io.BytesIO()
|
||||||
|
|
||||||
if filter == "/ASCIIHexDecode":
|
if filter == b"/ASCIIHexDecode":
|
||||||
if bits == 1:
|
if bits == 1:
|
||||||
# FIXME: the hex encoder doesn't support packed 1-bit
|
# FIXME: the hex encoder doesn't support packed 1-bit
|
||||||
# images; do things the hard way...
|
# images; do things the hard way...
|
||||||
|
@ -137,18 +137,18 @@ def _save(im, fp, filename):
|
||||||
im = Image.new("L", (len(data), 1), None)
|
im = Image.new("L", (len(data), 1), None)
|
||||||
im.putdata(data)
|
im.putdata(data)
|
||||||
ImageFile._save(im, op, [("hex", (0,0)+im.size, 0, im.mode)])
|
ImageFile._save(im, op, [("hex", (0,0)+im.size, 0, im.mode)])
|
||||||
elif filter == "/DCTDecode":
|
elif filter == b"/DCTDecode":
|
||||||
ImageFile._save(im, op, [("jpeg", (0,0)+im.size, 0, im.mode)])
|
ImageFile._save(im, op, [("jpeg", (0,0)+im.size, 0, im.mode)])
|
||||||
elif filter == "/FlateDecode":
|
elif filter == b"/FlateDecode":
|
||||||
ImageFile._save(im, op, [("zip", (0,0)+im.size, 0, im.mode)])
|
ImageFile._save(im, op, [("zip", (0,0)+im.size, 0, im.mode)])
|
||||||
elif filter == "/RunLengthDecode":
|
elif filter == b"/RunLengthDecode":
|
||||||
ImageFile._save(im, op, [("packbits", (0,0)+im.size, 0, im.mode)])
|
ImageFile._save(im, op, [("packbits", (0,0)+im.size, 0, im.mode)])
|
||||||
else:
|
else:
|
||||||
raise ValueError("unsupported PDF filter (%s)" % filter)
|
raise ValueError("unsupported PDF filter (%s)" % filter)
|
||||||
|
|
||||||
xref[3] = fp.tell()
|
xref[3] = fp.tell()
|
||||||
_obj(fp, 3, Type = "/XObject",
|
_obj(fp, 3, Type = b"/XObject",
|
||||||
Subtype = "/Image",
|
Subtype = b"/Image",
|
||||||
Width = width, # * 72.0 / resolution,
|
Width = width, # * 72.0 / resolution,
|
||||||
Height = height, # * 72.0 / resolution,
|
Height = height, # * 72.0 / resolution,
|
||||||
Length = len(op.getvalue()),
|
Length = len(op.getvalue()),
|
||||||
|
@ -157,9 +157,9 @@ def _save(im, fp, filename):
|
||||||
DecodeParams = params,
|
DecodeParams = params,
|
||||||
ColorSpace = colorspace)
|
ColorSpace = colorspace)
|
||||||
|
|
||||||
fp.write("stream\n")
|
fp.write(b"stream\n")
|
||||||
fp.write(op.getvalue())
|
fp.write(op.getvalue())
|
||||||
fp.write("\nendstream\n")
|
fp.write(b"\nendstream\n")
|
||||||
|
|
||||||
_endobj(fp)
|
_endobj(fp)
|
||||||
|
|
||||||
|
@ -168,37 +168,37 @@ def _save(im, fp, filename):
|
||||||
|
|
||||||
xref[4] = fp.tell()
|
xref[4] = fp.tell()
|
||||||
_obj(fp, 4)
|
_obj(fp, 4)
|
||||||
fp.write("<<\n/Type /Page\n/Parent 2 0 R\n"\
|
fp.write(b"<<\n/Type /Page\n/Parent 2 0 R\n"\
|
||||||
"/Resources <<\n/ProcSet [ /PDF %s ]\n"\
|
b"/Resources <<\n/ProcSet [ /PDF %s ]\n"\
|
||||||
"/XObject << /image 3 0 R >>\n>>\n"\
|
b"/XObject << /image 3 0 R >>\n>>\n"\
|
||||||
"/MediaBox [ 0 0 %d %d ]\n/Contents 5 0 R\n>>\n" %\
|
b"/MediaBox [ 0 0 %d %d ]\n/Contents 5 0 R\n>>\n" %\
|
||||||
(procset, int(width * 72.0 /resolution) , int(height * 72.0 / resolution)))
|
(procset, int(width * 72.0 /resolution) , int(height * 72.0 / resolution)))
|
||||||
_endobj(fp)
|
_endobj(fp)
|
||||||
|
|
||||||
#
|
#
|
||||||
# page contents
|
# page contents
|
||||||
|
|
||||||
op = StringIO.StringIO()
|
op = io.BytesIO()
|
||||||
|
|
||||||
op.write("q %d 0 0 %d 0 0 cm /image Do Q\n" % (int(width * 72.0 / resolution), int(height * 72.0 / resolution)))
|
op.write(b"q %d 0 0 %d 0 0 cm /image Do Q\n" % (int(width * 72.0 / resolution), int(height * 72.0 / resolution)))
|
||||||
|
|
||||||
xref[5] = fp.tell()
|
xref[5] = fp.tell()
|
||||||
_obj(fp, 5, Length = len(op.getvalue()))
|
_obj(fp, 5, Length = len(op.getvalue()))
|
||||||
|
|
||||||
fp.write("stream\n")
|
fp.write(b"stream\n")
|
||||||
fp.write(op.getvalue())
|
fp.write(op.getvalue())
|
||||||
fp.write("\nendstream\n")
|
fp.write(b"\nendstream\n")
|
||||||
|
|
||||||
_endobj(fp)
|
_endobj(fp)
|
||||||
|
|
||||||
#
|
#
|
||||||
# trailer
|
# trailer
|
||||||
startxref = fp.tell()
|
startxref = fp.tell()
|
||||||
fp.write("xref\n0 %d\n0000000000 65535 f \n" % len(xref))
|
fp.write(b"xref\n0 %d\n0000000000 65535 f \n" % len(xref))
|
||||||
for x in xref[1:]:
|
for x in xref[1:]:
|
||||||
fp.write("%010d 00000 n \n" % x)
|
fp.write(b"%010d 00000 n \n" % x)
|
||||||
fp.write("trailer\n<<\n/Size %d\n/Root 1 0 R\n>>\n" % len(xref))
|
fp.write(b"trailer\n<<\n/Size %d\n/Root 1 0 R\n>>\n" % len(xref))
|
||||||
fp.write("startxref\n%d\n%%%%EOF\n" % startxref)
|
fp.write(b"startxref\n%d\n%%%%EOF\n" % startxref)
|
||||||
fp.flush()
|
fp.flush()
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue
Block a user