Skip to content

Commit d628e19

Browse files
committed
use pdf library
1 parent 0c4b7a4 commit d628e19

File tree

3 files changed

+55
-4
lines changed

3 files changed

+55
-4
lines changed

selections/blueprints/application.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from selections.models import Applicant, Criteria, db, Members, Submission
99

1010

11-
1211
@app.route('/application/<app_id>')
1312
@auth.oidc_auth
1413
@before_request
@@ -26,14 +25,21 @@ def get_application(app_id, info=None):
2625
flash('You already reviewed that application!')
2726
return redirect(url_for('main'))
2827

29-
pdf_url = s3.generate_presigned_url('get_object', Params={'Bucket': app.config['S3_BUCKET_NAME'], 'Key': applicant_info.rit_id+'.pdf'}, ExpiresIn=30)
3028
return render_template(
3129
'vote.html',
3230
application=applicant_info,
33-
pdf_url=pdf_url,
31+
pdf_url='/application/content'+app_id,
3432
info=info,
3533
fields=fields)
3634

35+
@app.route('/application/content/<app_id>')
36+
@auth.oidc_auth
37+
def get_application_pdf(app_id):
38+
applicant_info = Applicant.query.filter_by(id=app_id).first()
39+
resp = s3.get_object(Bucket=app.config['S3_BUCKET_NAME'], Key='/'+applicant_info.rit_id+'.pdf')
40+
pdfdata = resp.read()
41+
return pdfdata
42+
3743

3844
@app.route('/application', methods=['POST'])
3945
@auth.oidc_auth

selections/static/js/render_pdf.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
2+
// atob() is used to convert base64 encoded PDF to binary-like data.
3+
// (See also https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/
4+
// Base64_encoding_and_decoding.)
5+
6+
// Loaded via <script> tag, create shortcut to access PDF.js exports.
7+
var { pdfjsLib } = globalThis;
8+
9+
// The workerSrc property shall be specified.
10+
pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://mozilla.github.io/pdf.js/build/pdf.worker.mjs';
11+
12+
// Using DocumentInitParameters object to load binary data.
13+
var canvas = document.getElementById('the-canvas');
14+
var loadingTask = pdfjsLib.getDocument(canvas.getAttribute('src'));
15+
loadingTask.promise.then(function (pdf) {
16+
console.log('PDF loaded');
17+
18+
// Fetch the first page
19+
var pageNumber = 1;
20+
pdf.getPage(pageNumber).then(function (page) {
21+
console.log('Page loaded');
22+
23+
var scale = 1.5;
24+
var viewport = page.getViewport({ scale: scale });
25+
26+
// Prepare canvas using PDF page dimensions
27+
var context = canvas.getContext('2d');
28+
canvas.height = viewport.height;
29+
canvas.width = viewport.width;
30+
31+
// Render PDF page into canvas context
32+
var renderContext = {
33+
canvasContext: context,
34+
viewport: viewport
35+
};
36+
var renderTask = page.render(renderContext);
37+
renderTask.promise.then(function () {
38+
console.log('Page rendered');
39+
});
40+
});
41+
}, function (reason) {
42+
// PDF loading error
43+
console.error(reason);
44+
});

selections/templates/review_app.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ <h3 class="card-title" style="text-align:left;">Application {{ application.id }}
2424
<h6 class="card-subtitle mb-2 text-muted">RIT ID: {{ application.rit_id }}</h6>
2525
<!--<h6 class="card-subtitle mb-2 text-muted">Gender: {{ application.gender }}</h6>-->
2626
<h6 class="card-subtitle mb-2 text-muted">Team: {{ application.team }}</h6>
27-
<embed src="{{pdf_url}}" type="application/pdf" width="100%" height="80%">
27+
<canvas id="the-canvas" src="{{pdf_url}}" width="100%" height="80%"></canvas>
2828
</div>
2929
</div>
3030
{% for score in scores %}
@@ -47,5 +47,6 @@ <h6 class="card-subtitle mb-2 text-muted">Score: {{ score.score }}</h6>
4747
</div>
4848
{% endfor %}
4949
</div>
50+
<script src="https://mozilla.github.io/pdf.js/build/pdf.mjs" type="module"></script>
5051
{% endblock %}
5152

0 commit comments

Comments
 (0)