#407 PDF Page by number (omitted book BookText)
This commit is contained in:
parent
6f2b405cf0
commit
4831ed6c09
@ -1421,6 +1421,41 @@ namespace RMuseum.Controllers
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// page of published book by page number
|
||||
/// </summary>
|
||||
/// <param name="pdfBookId"></param>
|
||||
/// <param name="pageNumber"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{pdfBookId}/page/{pageNumber}")]
|
||||
[AllowAnonymous]
|
||||
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PDFPage))]
|
||||
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
|
||||
[ProducesResponseType((int)HttpStatusCode.NotFound)]
|
||||
public async Task<IActionResult> GetPDFPageAsync(int pdfBookId, int pageNumber)
|
||||
{
|
||||
var bookRes = await _pdfService.GetPDFPageAsync(pdfBookId, pageNumber);
|
||||
|
||||
if (!string.IsNullOrEmpty(bookRes.ExceptionString))
|
||||
{
|
||||
return BadRequest(bookRes.ExceptionString);
|
||||
}
|
||||
if (bookRes.Result == null)
|
||||
return NotFound();
|
||||
|
||||
Response.GetTypedHeaders().LastModified = bookRes.Result.LastModified;
|
||||
|
||||
var requestHeaders = Request.GetTypedHeaders();
|
||||
if (requestHeaders.IfModifiedSince.HasValue &&
|
||||
requestHeaders.IfModifiedSince.Value >= bookRes.Result.LastModified)
|
||||
{
|
||||
return StatusCode(StatusCodes.Status304NotModified);
|
||||
}
|
||||
|
||||
|
||||
return Ok(bookRes.Result);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// PDF Service
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
using RMuseum.Models.Artifact;
|
||||
using RMuseum.Models.Artifact.ViewModels;
|
||||
using RSecurityBackend.Models.Image;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -87,5 +88,11 @@ namespace RMuseum.Models.PDFLibrary
|
||||
[NotMapped]
|
||||
public PDFBook PDFBook { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// tags view models
|
||||
/// </summary>
|
||||
[NotMapped]
|
||||
public ICollection<RArtifactTagViewModel> ArtifactTags { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -2790,6 +2790,14 @@
|
||||
<param name="pdf"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Controllers.PDFLibraryController.GetPDFPageAsync(System.Int32,System.Int32)">
|
||||
<summary>
|
||||
page of published book by page number
|
||||
</summary>
|
||||
<param name="pdfBookId"></param>
|
||||
<param name="pageNumber"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="F:RMuseum.Controllers.PDFLibraryController._pdfService">
|
||||
<summary>
|
||||
PDF Service
|
||||
@ -12868,6 +12876,11 @@
|
||||
pdf book
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RMuseum.Models.PDFLibrary.PDFPage.ArtifactTags">
|
||||
<summary>
|
||||
tags view models
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RMuseum.Models.PDFLibrary.PDFSource">
|
||||
<summary>
|
||||
PDF Source (Web Sites)
|
||||
@ -18424,6 +18437,14 @@
|
||||
<param name="omitPageText"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.PDFLibraryService.GetPDFPageAsync(System.Int32,System.Int32)">
|
||||
<summary>
|
||||
get page by page number
|
||||
</summary>
|
||||
<param name="pdfBookId"></param>
|
||||
<param name="pageNumber"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.Implementation.PDFLibraryService.GetAllPDFBooksAsync(RSecurityBackend.Models.Generic.PagingParameterModel,RMuseum.Models.Artifact.PublishStatus[])">
|
||||
<summary>
|
||||
get all pdfbooks (including CoverImage info but not pages or tagibutes info)
|
||||
@ -20067,6 +20088,14 @@
|
||||
<param name="term"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RMuseum.Services.IPDFLibraryService.GetPDFPageAsync(System.Int32,System.Int32)">
|
||||
<summary>
|
||||
get page by page number
|
||||
</summary>
|
||||
<param name="pdfBookId"></param>
|
||||
<param name="pageNumber"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:RMuseum.Services.IPictureFileService">
|
||||
<summary>
|
||||
manipulating picture files
|
||||
|
||||
@ -422,5 +422,13 @@ namespace RMuseum.Services
|
||||
/// <param name="term"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<(PaginationMetadata PagingMeta, PDFPage[] Items)>> SearchPDFPagesTextAsync(PagingParameterModel paging, int bookId, string term);
|
||||
|
||||
/// <summary>
|
||||
/// get page by page number
|
||||
/// </summary>
|
||||
/// <param name="pdfBookId"></param>
|
||||
/// <param name="pageNumber"></param>
|
||||
/// <returns></returns>
|
||||
Task<RServiceResult<PDFPage>> GetPDFPageAsync(int pdfBookId, int pageNumber);
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,6 +134,76 @@ namespace RMuseum.Services.Implementation
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// get page by page number
|
||||
/// </summary>
|
||||
/// <param name="pdfBookId"></param>
|
||||
/// <param name="pageNumber"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<RServiceResult<PDFPage>> GetPDFPageAsync(int pdfBookId, int pageNumber)
|
||||
{
|
||||
try
|
||||
{
|
||||
var pdfBook = await _context.PDFBooks.AsNoTracking().Where(b => b.Id == pdfBookId).SingleAsync();
|
||||
if (pdfBook.Status != PublishStatus.Published)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
pdfBook.BookText = "";
|
||||
var pdfPage = await _context.PDFPages.AsNoTracking()
|
||||
.Include(b => b.Tags).ThenInclude(t => t.RTag)
|
||||
.Where(b => b.PDFBookId == pdfBookId && b.PageNumber == pageNumber)
|
||||
.SingleOrDefaultAsync();
|
||||
if (pdfPage != null)
|
||||
{
|
||||
pdfPage.PDFBook = pdfBook;
|
||||
|
||||
List<RArtifactTagViewModel> rArtifactTags = new List<RArtifactTagViewModel>();
|
||||
if (pdfPage.Tags != null)
|
||||
{
|
||||
foreach (RTagValue tag in pdfPage.Tags)
|
||||
{
|
||||
RArtifactTagViewModel related = rArtifactTags.Where(t => t.Id == tag.RTagId).SingleOrDefault();
|
||||
List<RTagValue> values = (related == null) ? new List<RTagValue>() : new List<RTagValue>(related.Values);
|
||||
if (related == null)
|
||||
{
|
||||
related =
|
||||
new RArtifactTagViewModel()
|
||||
{
|
||||
Id = tag.RTag.Id,
|
||||
Order = tag.RTag.Order,
|
||||
TagType = tag.RTag.TagType,
|
||||
FriendlyUrl = tag.RTag.FriendlyUrl,
|
||||
Status = tag.RTag.Status,
|
||||
Name = tag.RTag.Name,
|
||||
NameInEnglish = tag.RTag.NameInEnglish,
|
||||
GlobalValue = tag.RTag.GlobalValue,
|
||||
PluralName = tag.RTag.PluralName,
|
||||
PluralNameInEnglish = tag.RTag.PluralNameInEnglish
|
||||
};
|
||||
rArtifactTags.Add(related);
|
||||
|
||||
}
|
||||
values.Add(tag);
|
||||
values.Sort((a, b) => a.Order - b.Order);
|
||||
related.Values = values;
|
||||
}
|
||||
|
||||
rArtifactTags.Sort((a, b) => a.Order - b.Order);
|
||||
}
|
||||
pdfPage.ArtifactTags = rArtifactTags;
|
||||
}
|
||||
return new RServiceResult<PDFPage>(pdfPage);
|
||||
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
return new RServiceResult<PDFPage>(null, exp.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// get all pdfbooks (including CoverImage info but not pages or tagibutes info)
|
||||
/// </summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user