スライドやドキュメントを共有するのにSpeakerDeckやedockrを使っています.(SlideShareは無料アカウントで再アップロードができなくなってしまってから使わなくなりました.)
SpeakerDeckの無料での制限で100アップロードまででそろそろいっぱい,edockrはしばらくしたら消えてしまうということを最近知りました.
@edocr Uploaded documents are disappearing by themselves. Is this a specification of the Free plan?https://t.co/3X6WwOYcID
— matoken (@matoken1) March 5, 2021
Yes, sorta. There are 3 parts of the edocr service: Sharing, SEO indexing & Storage. Sharing is free. So, inactive documents in free accounts are deleted over time by our algorithms. The cost of Premium is so low we assume if people cared they would sign up. <9 cents/doc/year.
— edocr (@edocr) March 5, 2021
pdfファイルを共有するだけならNextcloudでのURL共有を使えばいいのですが,webに埋め込むことが出来ません.Nextcloudの機能やアプリにそういったものがあるといいのですが,セキュリティの問題から実装されていません.
とりあえず雑な方法ですが,こんな感じで実現してみました.
Nextcloud URL共有リンクからpdfファイルを出力する
Nextcloudの公開URLの内容をpdfとして出力します.実行権を付けてcgiとして設定します.
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use IO::Handle;
STDOUT->autoflush(1);
$ARGV[0] = "" unless defined $ARGV[0];
my $url = $ARGV[0];
if( $url !~ /\/download$/ ){
$url = $url . "/download";
}
print "Content-Type: application/pdf\n\n";
getprint($url);
とりあえずこんな感じでcgiの後ろにNextcloud公開URLを付けてアクセスするとブラウザでpdfを見ることができるようになりました.
embedタグでwebに埋め込む
上で作ったcgiをobjectタグで埋め込んでみるととりあえず埋め込みが出来ました.このとき height
は %
を指定してもサイズが変わらないようでした.(Debian sid amd64 の chromium 88.0.4324.146-1
, firefox 86.0.1-1
で確認)
<embed src="http://cgi.example.com/pdf.cgi?http://nextcloud.example.com/index.php/s/XXXXXXXXXXXXXXX" type="application/pdf" width="640px" height="480px">
とりあえずそれっぽいことは出来ましたが,この方法ではpdfを読まなくてもページ読み込み時にpdfを全部読み込んでしまうようなのであまりよろしくない感じです.このあたりはSpeakerdeckなどはちゃんとしてていいですね.
とりあえずはリンクで共有かな?