Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Basic PDF Reader/Viewer for iOS
INTRODUCTION
I've written this basic PDF reader/viewer app for fellow iOS
developers struggling with wrangling PDF files onto iOS device
screens. This project consists of two separate parts:
The core PDF view class and its support code:
PDFViewTiled.h, PDFViewTiled.m
PDFTiledLayer.h, PDFTiledLayer.m
CGPDFDocument.h, CGPDFDocument.m
The app classes and support files to show the use of the above code:
Reader-Info.plist, Reader_Prefix.pch
ReaderAppDelegate.h, ReaderAppDelegate.m
ReaderViewController.h, ReaderViewController.m
UIViewFader.h, UIViewFader.m, main.m
Localizable.strings, Icon-*.png
The app is universal: It runs on iPad, iPhone and iPod touch, iOS 3.2
and up. It also supports the Retina displays on iPhone 4 and iPod touch
4th generation and is ready to be fully internationalized. The intention
was to provide a complete project template to start building from. Though
not tested, the PDFViewTiled class should work on iOS 3.1. The app handles
file sharing and PDF "Open In..." from other apps (Mail, Dropbox, etc.)
and all device orientations. It also remembers the last page number
that the bundled PDF was on.
After launching the app, tap on the left hand side of the screen to go
back a page. Tap on the right hand side to go to the next page. You can
also swipe left and right when fully zoomed out to change pages. Tap on
the bottom of the screen to fade in the page slider to quickly move around
a document. Tap on the top of the screen to fade in the toolbar. Double-tap
with one finger (or pinch out) to zoom in. Double tap with two fingers
(or pinch in) to zoom out.
This implementation has been tested with large PDF files (over 250 MB
and over 2800 pages) and with PDF files of all flavors (from text only
to graphics heavy magazines). It also works rather well on older devices
(such as iPod touch 2nd generation and iPhone 3G). To get an idea of its
responsiveness, build and run the app with "The Odyssey" from Planet PDF.
Then quickly tap on the right hand side of the screen of your iDevice.
N.B. Version 1.0 does not support iOS 4 multitasking nor fancy eye-candy
(page curls or animations). This is "left as an exercise for the student".
DOCUMENTATION
PDFViewTiled Class Reference
Inherits from UIView : UIResponder : NSObject
Declared in PDFViewTiled.h
Overview
The PDFViewTiled class implements a custom CATiledLayer-backed UIView
for showing PDF files. It supports password protected PDF files, changing
page numbers and the changing the PDF file being shown.
Instance Methods
-initWithURL:
Initializes and returns a newly allocated PDF view object with the
specified file URL to a PDF, page number in the PDF, optional PDF
password and UIView frame rectangle.
- (id)initWithURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password frame:(CGRect)frame
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
frame - The frame rectangle for the view (see UIView Class Reference).
Returns an initialized PDF view object or nil if the object's UIView
could not be created. If an error occurs during PDF file open (missing
file, wrong password) a valid object will still be returned but the
page and pages properties will be 0. In this case, -changeFileURL:
could be used to update the PDF view object with valid parameters.
-changeFileURL:
Updates an existing PDF view object with a new PDF file URL, page
number and password.
- (BOOL)changeFileURL:(NSURL *)fileURL onPage:(NSInteger)onPage password:(NSString *)password
fileURL	- The file URL to the PDF file that should be shown in the view.
onPage - The initial page number to open the PDF at. The value is bounds checked.
password	- An optional password to open the PDF with. Pass nil when no password.
Use this method to change the PDF file being shown in an existing
PDF view object. Returns YES on success, NO on failure. Failure is
non-destructive; the previous PDF file will continue to be shown in
the PDF view object on failure. This method updates the page and
pages properties on success.
-gotoPage:
Changes the page being shown in the PDF view object.
- (void)gotoPage:(NSInteger)newPage
newPage	- The new page number to be shown.
Call this method to change the PDF page being shown in the PDF view
object. If a number greater than the total number of pages is passed,
then the last page of the PDF will be shown. If a number smaller than
1 is passed, then the first page will be shown. This method updates
the page property with the new bounds checked page number.
-decrementPage
Shows the previous PDF page in the PDF view object.
- (void)decrementPage
Call this method to show the previous PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-incrementPage
Shows the next PDF page in the PDF view object.
- (void)incrementPage
Call this method to show the next PDF page in relation to the current
page in the PDF view object. This method updates the page property with the
new (bounds checked) page number.
-willRotate
View pre-rotation support method.
- (void)willRotate
Call this method on the PDF view object from the
-willRotateToInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
-didRotate
View post-rotation support method.
- (void)didRotate
Call this method on the PDF view object from the
-didRotateFromInterfaceOrientation: method in the UIViewController
hosting the PDF view object. See sample app code for usage.
Properties
page
The PDF view object’s current page number value (read-only).
@property (nonatomic, readonly) NSInteger page
Contains the current page number and is updated in response to page
change method calls. Contains 0 if -initWithURL: failed.
pages
The PDF view object’s number of pages in PDF value (read-only).
@property (nonatomic, readonly) NSInteger pages
Contains the total number of pages in the current PDF file.
Contains 0 if -initWithURL: failed.
HISTORY
2010-09-01: Version 0.0.1 - Initial start of project and code crafting.
2010-09-09: Version 1.0.0 - First release into the wild for use and abuse.
2010-10-08: Version 1.0.1 - Fixed PDFs with rotation handling bug and project
build with GCC 4.2 instead of LLVM (SDK 4.1 bug).
CONTACT INFO
Questions, feedback and iOS development work welcome:
Email: joklamcak(at)gmail(dot)com
Website: http://www.vfr.org/

About

Basic PDF Reader/Viewer for iOS

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors